在第x个时间引发错误,然后返回值

时间:2016-01-12 12:50:02

标签: ruby-on-rails ruby-on-rails-4 rspec

我想使用rspec来模拟一个flakey服务处理。

为此,我想让服务调用引发异常几次,并在这些时间之后返回实际值。

这是否可以使用rspec?

我试过

allow(Service).to receive(:run).once.and_raise(MyError)
allow(Service).to receive(:run).once.and_return(response)

但是在第一次运行时它返回响应而不是错误

1 个答案:

答案 0 :(得分:0)

您可以使用block implementation来完成此操作。

call_count = 0
allow(Service).to receive(:run) do
  call_count += 1
  call_count < 3 ? raise(MyError) : response
end