spring of life

技術、ときどき日常のブログ(予定)

before(:all) 内でスタブ作成

RSpec でスタブを作ろうとしたら before(:each)の中でしか作れなくて、before(:all)の中で作れないのかな〜といろいろ調べてたらこういうのがあるらしい

relishapp.com

例えばこんな感じ

before(:all) do
  RSpec::Mocks.with_temporary_scope do
    allow(HogeClass).to receive(:fuga).and_return('piyo')
    @actual = HogeClass.fuga #=> 'piyo'
  end
end

it { expect(@actual).to eq 'piyo' }

ちなみに、and_returnに値を複数入れると

allow(HogeClass).to receive(:fuga).and_return('piyo1', 'piyo2')
HogeClass.fuga #=> 'piyo1'
HogeClass.fuga #=> 'piyo2'

て感じで戻り値を変えられる