我的测试中有一些代码可以与一些外部服务一起使用。该服务不是很稳定,因此有时会无缘无故崩溃。但在 80% 的运行中,它运行良好。
所以我想要一种方法来自动重新运行所有失败的 rspecs 几次(例如 2 或 3 次)。有什么办法吗?
很多人会说您的测试实际上不应该影响外部服务,这就是这样做的原因之一。您的测试不应失败,因为某些外部服务已关闭。
TL;DR 使用模拟和存根或替换那些外部服务调用
与其重新运行失败的规范,你不能只运行访问服务的方法一定次数并运行结果的逻辑 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
在失败时返回,但如果不是,您可以更改它以适合您的特定情况 - 您会得到一般的想法。