4
1

More than 1 year has passed since last update.

はじめに

今回はRSpec内でテスト前の事前処理をまとめたいときに使用するbefore doについてまとめます
そもそも使ったことがない、1から知りたい場合は下記の記事を合わせて参照してください

今回のテストは 「ログイン処理があるwebページでログイン後の処理(マイページ確認など)をテストする」 ことを想定して記載します

何も考えずにテストを書くと…

request_spec.rb
describe 'マイページ確認' do
  context 'ログインしている場合' do
    it '「ログインID」の項目があること' do
      post '/login_to_application' params:{id: 'test_user', password:'password'} # ログイン処理
      get '/mypage'
      expect(response.body).to include 'ログインID:'
    end

    it '「ニックネーム」の項目があること' do
      post '/login_to_application' params:{id: 'test_user', password:'password'} # ログイン処理
      get '/mypage'
      expect(response.body).to include 'ニックネーム:'
    end

    it '「ひとこと」の項目があること' do
      post '/login_to_application' params:{id: 'test_user', password:'password'} # ログイン処理
      get '/mypage'
      expect(response.body).to include 'ひとこと:'
    end
  end

  context 'ログインしていない場合' do
    it 'エラーページに遷移すること' do
      get '/mypage'
      expect(response.body).to include 'お探しのページは見つかりませんでした。'
    end
  end
end
      

"/login_to_application"というパスにユーザー名とパスワードを渡すとログインできると仮定して記載していますが、上記のようにテスト項目ごとに毎回ログイン処理を記載しないとテストが通りません。こんな時に役に立つのが共通化するためのbefore doです。

before do

request_spec.rb
describe 'マイページ確認' do

  context 'ログインしている場合' do
    before do
      post '/login_to_application' params:{id: 'test_user', password:'password'} # ログイン処理
    end

    it '「ログインID」の項目があること' do
      get '/mypage'
      expect(response.body).to include 'ログインID:'
    end

    it '「ニックネーム」の項目があること' do
      get '/mypage'
      expect(response.body).to include 'ニックネーム:'
    end

    it '「ひとこと」の項目があること' do
      get '/mypage'
      expect(response.body).to include 'ひとこと:'
    end
  end

  context 'ログインしていない場合' do
    it 'エラーページに遷移すること' do
      get '/mypage'
      expect(response.body).to include 'お探しのページは見つかりませんでした。'
    end
  end
end
      

before do を用いることで上記のようにログイン処理をまとめることができます。
また、今回はログインしている場合としていない場合でテストを分けているため'ログインしている場合'のcontext内に書いてますが、describe直下に書くことで'ログインしていない場合'のcontextにも反映させることができます。

参考資料

4
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
4
1