0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

RSpec覚書

Posted at

初めまして。
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

テストケースを整理するのに便利。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?