LoginSignup
3
1

More than 1 year has passed since last update.

RSpecでページのステータスコードを取得する

Posted at

ステータスコードを取得する前に

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が使用できるようになる。

参考記事

RSpecでページのステータスコードを取得する方法

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1