今までRSpecに関する記事を複数書いてきましたが、RSpecの基本構成に関する記事を上げてなかったので、今回はかんたんにまとめていきます。
かなり初歩的な内容になりますので、RSpecの基本的な部分が分かっている方は、他の記事をご覧ください。
[Rails]RSpecでテストを行う準備(FactoryBot使用)
[Rails]RSpecでモデルのテスト(FactoryBot使用)
[Rails]RSpecでよく使うマッチャー10選
[RSpec]request specでcontrollerテストをやってみる
#RSpecの構成
それではさっそく、RSpecの構成について説明していきます。
RSpecでは、テストしたい項目を入れ子構造で、分類していきます。
入れ子構造にすることで、テストを実行した際にどこでエラーが出ているかがすぐにわかるので、便利ですし、テストコードを書いている際もどこのテストをしているのかわかりやすいです。
構成の部分で使用されるものは下記です。
- describe (テストの1番おおきいくくり :
必須
) - context (describeをさらに細分化する場合にのみ使用)
- it (具体的なテストをここで実施します :
必須
) - before (itの前に実行したい項目がある場合にのみ使用)
describe
とit
が必須でそれ以外は状況に合わせて使用していきます。
#四則演算の例
では、四則演算を例にコードを記述していきます。
####describe
まず、describe
は1番大きいくくりなので、四則演算を入れていきます。
describe '四則演算' do
# この中にいろいろと入れていく
end
####context
四則演算という大きなくくりができたので、足し算、引き算といくくりでさらに細分化したいので、context
を使っていきます。
describe '四則演算' do
# 足し算に関するテスト
context '足し算' do
# テストはこの中で実施
end
# 引き算に関するテスト
context '引き算' do
# テストはこの中で実施
end
end
####it
では、足し算と引き算という項目まで細分化できたので、足し算と引き算に関する具体的なテストをit
で記述していきます。
describe '四則演算' do
context '足し算' do
it '1 + 1は2になるか' do
# エクスペクテーションとマッチャーを使ってテストコード記述
expect(1 + 1).to eq 2
end
it '100 + 1は101になるか' do
# エクスペクテーションとマッチャーを使ってテストコード記述
expect(100 + 1).to eq 101
end
end
context '引き算' do
it '7 - 5は2になるか' do
# エクスペクテーションとマッチャーを使ってテストコード記述
expect(7 - 5).to eq 2
end
end
end
このような入れ子構造がRSpecの基本構造です。
足し算というくくりの中に何個でもit
を入れていくことが可能です。
エクスペクテーションとマッチャーってなんやねんって方はこちらどうぞ!
[Rails]RSpecでよく使うマッチャー10選
#before
before
の説明がまだだったので、before
に関しても触れておきます。
it
の前に実行したいことがあれば、記述していきます。
テストしたいページに移動やサインインがよく使われます。
そのページに遷移することで、そのページでのテストが実行できます。
describe 'トップ画面のテスト' do
# itが実行される前にroot_pathに移動しています。
before do
visit root_path
end
context "表示の確認" do
it "top画面に投稿一覧へのリンクが表示されているか" do
expect(page).to have_link "", href: posts_path
end
it "root_pathが / であるか" do
expect(current_path).to eq('/')
end
end
end
#まとめ
RSpecの構成
- describe (テストの1番おおきいくくり :
必須
)
- context (describeをさらに細分化する場合にのみ使用)
- it (具体的なテストをここで実施します :
必須
)
- before (itの前に実行したい項目がある場合にのみ使用)
今回は超初歩的なことをまとめてみました。
RSpecのコードをよくわからず、コピペしていた方などの参考になれば幸いです。