存根和__如何只能例外一次?

时间:2013-08-09 14:51:50

标签: ruby rspec

我知道有一种方法可以让存根返回多个不同的值,如下所示:

subject.stub(:method_call.and_return(1,2,3)

但是我希望这样的事情是可能的:

subject.stub(:method_call).and_raise(Exception).once
subject.stub(:method_call).and_return(1)

但是我还没有找到一种优雅的方法让stub只在第一次调用时引发异常。建议?

1 个答案:

答案 0 :(得分:6)

我知道这样做的唯一方法是使用这样的计数器变量:

counter = 0
times   = 2
TestModel.any_instance.stub(:some_method) do
  (counter += 1) <= times ? raise(Exception) : 1
end

将输出如下:

test = TestModel.new
test.some_method
=> Exception
test.some_method
=> Exception
test.some_method
=> 1