Posted at

色々あってRSpecのstubで副作用を生み出したいとき

allow(dbl).to receive(:foo) { do_something }

allow(dbl).to receive(:foo).with("args") { do_something }
allow(dbl).to receive(:foo).once { do_something }
allow(dbl).to receive(:foo).ordered { do_something }

do_somethingで何かをすればいい。

block の戻り値がそのstubの戻り値になるので、同時にand_returnは使えない。

参考: https://relishapp.com/rspec/rspec-mocks/v/3-8/docs/configuring-responses/block-implementation