繁体   English   中英

救援重试Ruby

[英]rescue retry Ruby

长时间休息后返回Ruby,我正在尝试使用Capybara / Cucumber运行带有RSpec断言的抢救重试块。 我有以下目的是为了无法测试我的重试。 它似乎没有运行重试,我很困惑:

  begin
    retries ||= 2
    a = 1
    a.eql? 2 # false
    raise
  rescue
    puts 'Retrying assertion for failed step'
    retries -= 1
    if retries > 0
      sleep 0.5 # allows render of screen content
      retry
    end
  end

我确实怀疑我在这里写错了。 是这样吗

expect失败时,RSpec通过抛出RSpec::Expectations::ExpectationNotMetError 您正在通过无限制的rescue来捕获它,因此RSpec从未看到过它,这使您的测试通过了。 永远不要使用无限rescue 始终使用类型化的抢救,最通用的类​​型是StandardError (不是Exception !)-但要使其尽可能严格和具体。

如果您打算捕获ExpectationNotMetError试两次,然后让它发生,那么您需要将其重新raise (使用plain raise ),以使RSpec能够看到它,否则Ruby认为它已被处理并且执行可以正常继续(而RSpec看不到)它)。 您仍然应该专门对其进行营救,只是为了避免在营救的区块中可能发生的其他错误。


*)除非您确切地 知道 件事可能出错(甚至是三重检查)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM