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