How can I stub a method only on the first call, and in the second one it should behave as expected?
I have the following method:
def method
do_stuff
rescue => MyException
sleep rand
retry
end
I want to the first call of do_stuff
to raise MyException
, but in the second call, behaves normally. I need to achieve this to test my rescue
block without getting an infinite loop.
Is there a way to achieve this?
You can pass a block to a stub that will be invoked when the stub is called. You can then perform the unstub in there, in addition to doing whatever you need to.
Seems to work nicely here.
Alternately, you could just track the number of calls and return different results for the stub based on the call count: