ぺんぎんのRails日記

ぺんぎん。エンジニア経験ゼロ。Rails勉強中。

【RSpec】beforeとは【rails】

今回はRSpecの中で使われるbeforeについてサクッとまとめます。

beforeの使い方

beforeは英語で前という意味がありますね。 そうです。describeやcontextを検証していく「前に」処理してくれるものです。

たとえば次のようなテストを見てみましょう。

describe 'タスク管理', type: :system do
  describe '一覧表示' do
    context 'ユーザーAがログインしているとき'
      it 'ユーザーAが作成したタスクが表示される' do
        expect(page).to have_content 'タスク1'
      end
    end
  end
end

「ユーザーAがログインしている」を状態は、「it 'ユーザーAが作成したタスクが表示される' do」を検証する前に処理する必要がありますよね。 なので、ここではit〜doよりもひとつ上の階層でbeforeを使って検証します。

describe 'タスク管理', type: :system do
  describe '一覧表示' do
    context 'ユーザーAがログインしているとき'
      before do
        visit login_path
        fill_in 'メールアドレス', with: 'user_a@example.com'
        fill_in 'パスワード', with: 'password'
        click_button 'ログイン'
      end
      it 'ユーザーAが作成したタスクが表示される' do
        expect(page).to have_content 'タスク1'
      end
    end
  end
end

今はcontext 'ユーザーAがログインしているとき'の下にbeforeを書きましたが、全く同じ処理を別のcontext内でも使うような時には、ひとつ上のdescribe階層でbeforeを書けば、複数のcontextで同じ処理を共通化することもできちゃいます( ^ω^ )

done!