Mic*_*ant 7 ruby rspec capybara
由于Net::ReadTimeout错误,我们的测试间歇性失败。
我们尚未找到永久解决方案。现在我们想尝试挽救该特定错误并重新运行测试。这不是一个理想的解决方案或真正的解决方案,但我们在短期内需要一些东西。
我们如何重新运行失败的 rspec 测试?我的意思是测试套件如何自动为该测试执行此操作?
我们可以这样捕获错误:
# spec/support/capybara.rb
def rescue_net_read_timeout(max_tries = 1, tries = 0, &block)
yield
rescue Net::ReadTimeout => e
Rails.logger.error e.message
end
Run Code Online (Sandbox Code Playgroud)
但我们如何让它尝试重新运行该测试呢?我们想要尝试重新运行测试,然后如果重新运行通过且没有错误,则继续进行(理想情况下将其记录下来),否则将真正失败并考虑测试,因此套件失败。
我使用名为rspec-repeat的红宝石宝石。在数百个自动化测试中,我们可能会在这里或那里遇到不稳定的测试,这有助于我们克服误报。
理想情况下,最好继续诊断这些不稳定的测试,但这有助于缓解过渡期间的问题。
旁注,rspec-repeat基于另一个名为 的库rspec-retry,但我发现这个库的代码库更整洁,配置更易于使用。