rspec subjectの使い方

rspecのsubjectは letなどと同じように、処理を変数に置き換えるものです。

let(:params) do
  {
    fuga: 'hoge'
  }

subject { get '/hogehoge', params: params; response }

このように subjectを定義することで、 get '/hogehoge', params: paramというリクエストをDRYに書くことが出来ます。

context 'ログインしてるとき' do
  before { sign_in user }

  it do
    get '/hogehoge', params: params; response 
    expect(response).to have_http_status(:success)
  end
end

context 'ログインしてないとき' do
  before { sign_out user }

  it do
    get '/hogehoge', params: params; response 
    expect(response).to have_http_status(:redirect)
  end
end
subject { get '/hogehoge', params: params; response }

context ' ログインしてるとき' do
  before { sign_in user }
  it { is_expected.to have_http_status(:success)
end

context ' ログインしてないとき' do
  before { sign_out user }
  it { is_expected.to have_http_status(:redirect)
end

全体の行数が少なくなって、記述もDRYになって読みやすくなりました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です