初めまして。
Rubyを始めて2年目、覚えること沢山あるので、忘れないようにメモです。
初心者的なこともあると思いますが、備忘録です。
RSpecの評価は内側が優先
describe 'ダミーテスト' do
before do
allow(dummy_mock).to receive('2番手')
end
context '正常系' do
before do
allow(dummy_mock).to receive('1番手')
end
end
end
同じdummy_mockがあったら、内側、すなわち「1番手」の方が適用される。
これを使えば、「このテストケースの時だけ、モックは特別な値を返して欲しい」というのが実現できる。
RSpecの実行順に注意
失敗するパターン
describe 'ダミーテスト' do
let(:request_params){{dummy: 'だみー'}}
before do
expect(request_params['dummy']).to ('ダミー')
end
context '正常系' do
before do
request_params['dummy'] = 'ダミー'
end
end
end
内側から評価されていくので、正常系のcontextの中のbefore実行後、describeの中のbeforeを実行と見えるが、どっこい。
1.expectを実行
2.変数「request_params」を探すとdescribeの直下にいるので、これを評価
なので、上記コードは失敗する。
これは成功する
describe 'ダミーテスト' do
let(:request_params){{dummy: 'だみー'}}
context '正常系' do
before do
request_params['dummy'] = 'ダミー'
expect(request_params['dummy']).to ('ダミー')
end
end
end
こうすれば、request_params['dummy']には「ダミー」が入り、成功する。
contextは入れ子にできる
describe 'テスト' do
context '正常系:' do
context 'ユーザーがテスト会員の場合' do
end
context 'ユーザーがシステム管理者の場合' do
end
end
context '異常系:' do
context 'セッションが正しくない場合' do
end
end
end
テストケースを整理するのに便利。