[英]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.