ステータスコードを取得する前に
Rspec
でのテストの際にCapybara
を使ったテスト方法が主流だが、Capybara
にはページのステータスコードを取得できない。そのためステータスの検証ができない。
Capybara
テスト時に実際にブラウザを起動させて行うテストで、エラーがあったときにはエラー時のスクリーンショットを取ってくれる
テストの設定
ステータスコードを取得するには、テストの設定をdriven_by(:rack_test)
に変えるだけで出来る。
※ driven_by(:rack_test)
を記述すると、Capybaraのテスト設定がオーバーライドされてしまい、スクリーンショットをとることができなくなるので注意。
require 'rails_helper'
RSpec.describe "Samples", type: :system do
before do
driven_by(:rack_test) # ここ
end
end
権限を持たないユーザー(writer)
がアクセスするとステータスコードが403
になるかを検証してみる。
require 'rails_helper'
RSpec.describe "Samples", type: :system do
before do
driven_by(:rack_test)
end
describe 'Writer' do
before { login_as(writer) }
it 'Current_page is 403 error page' do
visit admin_categories_path
expect(page).to have_content('You are not authorized to perform this action.'), '403エラーページが表示されていません'
expect(page.status_code).to eq(403), 'ステータスコードが403ではありません'
end
end
end
driven_by(:rack_test)
を使うとステータスコードを取得するpage.status_code
が使用できるようになる。