RSpec - 如何挽救并重试测试?

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)

但我们如何让它尝试重新运行该测试呢?我们想要尝试重新运行测试,然后如果重新运行通过且没有错误,则继续进行(理想情况下将其记录下来),否则将真正失败并考虑测试,因此套件失败。

Phi*_*hil 2

我使用名为rspec-repeat的红宝石宝石。在数百个自动化测试中,我们可能会在这里或那里遇到不稳定的测试,这有助于我们克服误报。

理想情况下,最好继续诊断这些不稳定的测试,但这有助于缓解过渡期间的问题。

旁注,rspec-repeat基于另一个名为 的库rspec-retry,但我发现这个库的代码库更整洁,配置更易于使用。