Ruby
Rails
RSpec

rspecのstubとmockについて

More than 3 years have passed since last update.


モックとスタブの使い分け


モック

「オブジェクトのメソッドがどう呼ばれて何を返すか」というインタフェースも含めたテストのために使う


スタブ

テストをスムーズに行うために「あるオブジェクトのメソッドが呼ばれたら、ある戻り値を返す」ために使う

# object.stub(:is_dummy?).and_return(true)

User.stub(:is_dummy?).and_return(true)

この書き方から

# allow(object).to receive(method).and_return(return value)

allow(User).to receive(:is_dummy?).and_return(true)

に書き換える


こっちのがいいのかな

allow_any_instance_of(Widget).to receive(:name).and_return("Wibble")

expect_any_instance_of(Widget).to receive(:name).and_return("Wobble")


参考

https://github.com/rspec/rspec-mocks

http://stackoverflow.com/questions/17566690/object-any-instance-should-receive-vs-expect-to-receive

http://nabewata07.hatenablog.com/entry/ruby/rspec/mocks2-14/syntax-and-spy

http://morizyun.github.io/blog/rspec-model-controller-ruby-rails/