问题
I know the following things work:
returning a parameter
subject.should_receive(:get_user_choice){ |choices| choices.to_a[0] }
and a sequence (it will return a 0 on the first call, and the second time "exit")
subject.should_receive(:get_user_choice).and_return(0, "exit")
But how to combine them? what if I would like to return the parameter the first time and then return "exit"
回答1:
Alternatively:
subject.should_receive(:get_user_choice).ordered.and_return { |choices| choices.to_a[0] }
subject.should_receive(:get_user_choice).ordered.and_return { "exit" }
回答2:
Not most elegant, but how about:
n = 0
subject.should_receive(:get_user_choice){|choices|
(n += 1) < 2 ? choices.to_a[0] : "exit"
}
来源:https://stackoverflow.com/questions/7754733/rspec-stubbing-return-in-a-sequence