はじめに
-
Rspecを触る機会があったのでわかる範囲でまとめます
-
今回はとあるページにアクセス可能かをテストする想定で記載しています
-
2021/12/20:初版
-
2022/06/23:細かなレイアウト修正
describe/context
request_spec.rb
describe 'アクセス確認' do
context 'アクセス可能な場合' do
# 正常にアクセスできること(200)
# "トップページ"の文言がサクセス先に含まれるか確認
# リダイレクトされるがアクセスできる(302)
end
context 'アクセスできない場合' do
# 権限がなくてアクセスできない(403)
# ページが存在しない(404)
end
end
- describeでテストを大まかにグループ分け、さらにその中でcontextを使用してグループ内で細かく分けられる
it/expect/eq/include
request_spec.rb
describe 'アクセス確認' do
context 'アクセス可能な場合' do
it '正常にアクセスできること(200)' do
get '/'
expect(response.status).to eq 200
end
it '「トップページ」の文言がサクセス先に含まれるか確認' do
get '/'
expect(response.body).to include 'トップページ'
end
it 'リダイレクトされるがアクセスできる(302)' do
get '/redirect_page'
expect(response.status).to eq 302
end
end
context 'アクセスできない場合' do
it '権限がなくてアクセスできない(403)' do
get '/my_page'
expect(response.status).to eq 403
end
it 'ページが存在しない(404)' do
get '/aaa'
expect(response.status).to eq 404
end
end
end
- itでcontext内のテスト項目を記述する
- 実行時it単位で結果が返ってくるため、極力it内に複数のテスト観点は記述しないようにする
-
expect(XXX).to eq YYY
と記述することで「XXXはYYYと等しくなる」というテスト項目になる -
expect(XXX).to include YYY
と記述することで「XXXはYYYに含まれる」というテスト項目になる- ※XXX:取得値 YYY:期待値
実行方法
- 以下を実行するとテストをフルで実施される(項目数によるが、実行に時間がかかる)
$ bundle exec rake spec
一部のテストだけ実行する
特定のテストファイル(またはディレクトリ)のみを実行する
- 以下を実行で指定したパスのファイル内のテストのみ実行できる
$ bundle exec rspec spec/request/request_spec.rb
- ディレクトリごと指定することも可能
$ bundle exec rspec spec/request/
タグとファイル内の一部のテストのみ実行
- 各テストはdescribe/context/it単位でタグ付けできる
- 設定したタグごとに実行するテスト項目を選択できる
request_spec.rb
describe 'アクセス確認' do
context 'アクセス可能な場合' do
it '正常にアクセスできること(200)',type: accessible do
get '/'
expect(response.status).to eq 200
end
it '「トップページ」の文言がサクセス先に含まれるか確認' do
get '/'
expect(response.body).to include 'トップページ'
end
it 'リダイレクトされるがアクセスできる(302)' do
get '/redirect_page'
expect(response.status).to eq 302
end
end
context 'アクセスできない場合',doing: true do
it '権限がなくてアクセスできない(403)', do
get '/my_page'
expect(response.status).to eq 403
end
it 'ページが存在しない(404)' do
get '/aaa'
expect(response.status).to eq 404
end
end
end
-
例えば上記のように「正常にアクセスできること(200)」に
type: accessible
のタグと「アクセスできない場合」にdoing: true
のタグをつける -
「正常にアクセスできること(200)」のテストだけ実行させるのは以下のコマンドは以下となる
$ bundle exec rspec spec/request/request_spec.rb --tag @type:accessible
- 「アクセスできない場合」のテストだけ実行させるのは以下のコマンドは以下となる
- タグにboolean型を指定している場合は省略可能
$ bundle exec rspec spec/request/request_spec.rb --tag @doing