1

我的测试中有一些代码可以与一些外部服务一起使用。该服务不是很稳定,因此有时会无缘无故崩溃。但在 80% 的运行中,它运行良好。

所以我想要一种方法来自动重新运行所有失败的 rspecs 几次(例如 2 或 3 次)。有什么办法吗?

4

2 回答 2

3

很多人会说您的测试实际上不应该影响外部服务,这就是这样做的原因之一。您的测试不应失败,因为某些外部服务已关闭。

TL;DR 使用模拟和存根或替换那些外部服务调用

于 2012-10-15T09:14:25.537 回答
1

与其重新运行失败的规范,你不能只运行访问服务的方法一定次数并运行结果的逻辑 OR 的期望吗?

所以而不是:

it "returns expected value for some args" do
   unstable_external_service(<some args>).should == <expected return value>
end

做这样的事情:

def run_x_times(times, args)
  return nil if times == 0
  unstable_external_service(args) || run_x_times(times-1)
end

it "returns expected value for some args" do
  run_x_times(10, <some args>).should == <expected return value>
end

您可以在任何时候访问服务时在整个测试中使用相同的包装方法。我在这里假设您的服务nil在失败时返回,但如果不是,您可以更改它以适合您的特定情况 - 您会得到一般的想法。

于 2012-10-15T08:40:19.360 回答