自动运行失败了rspec测试

时间:2012-10-15 07:20:14

标签: ruby rspec

我的测试中有一些代码可以使用某些外部服务。这项服务不是很稳定,所以有时会无故崩溃。但在80%的运行中它运作良好。

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

2 个答案:

答案 0 :(得分:2)

很多人会说你的测试实际上不应该打击外部服务,这是其中一个原因。您的测试不应该失败,因为某些外部服务已关闭。

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

答案 1 :(得分: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,但如果不是,您可以根据您的具体情况进行更改 - 您会得到一般的想法。