簡體   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