RSpec Stubbing:按顺序返回

时间:2011-10-13 13:18:58

标签: ruby rspec stub

我知道以下事情有效:

返回参数

subject.should_receive(:get_user_choice){ |choices| choices.to_a[0] }

和一个序列(它将在第一次调用时返回0,第二次返回“exit”)

subject.should_receive(:get_user_choice).and_return(0, "exit")

但如何将它们结合起来? 如果我想第一次返回参数然后返回“退出”

该怎么办?

2 个答案:

答案 0 :(得分:5)

可替换地:

subject.should_receive(:get_user_choice).ordered.and_return { |choices| choices.to_a[0] }
subject.should_receive(:get_user_choice).ordered.and_return { "exit" }

答案 1 :(得分:1)

不是最优雅,但如何:

n = 0
subject.should_receive(:get_user_choice){|choices|
   (n += 1) < 2 ? choices.to_a[0] : "exit"
}