rspecのsubjectは let
などと同じように、処理を変数に置き換えるものです。
spec.rb
let(:params) do
{
fuga: 'hoge'
}
subject { get '/hogehoge', params: params; response }
このように subject
を定義することで、 get '/hogehoge', params: param
というリクエストをDRYに書くことが出来ます。
subjectがないとき.rb
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があるとき.rb
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になって読みやすくなりました。