我的测试中有一些代码可以使用某些外部服务。这项服务不是很稳定,所以有时会无故崩溃。但在80%的运行中它运作良好。
所以我想要一种方法来自动重新运行所有失败的rspecs几次(例如2或3次)。 有没有办法做到这一点?
答案 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
,但如果不是,您可以根据您的具体情况进行更改 - 您会得到一般的想法。