まず第一に、外部API呼び出しをモックすることがほとんどの場合正しいことであることに同意します。ただし、この場合はそうではありません。
一部のテストでランダムなTimeout::Error
例外が発生しているので、それらを無視して、例を自動的に再実行できるようにしたいと思います。失敗は、10回失敗した後にのみ報告する必要があります。
その他の例外と障害はすべて報告する必要があります。
私はファイルのグローバルaround(:each)
フックを使用してこの動作を実装しようとしました:spec/spec_helper.rb
RSpec.configure do |config|
config.around(:each) do |example|
attempts = 0
passed = false
begin
attempts +=1
example.run
passed = true
rescue Timeout::Error => e
raise e if attempts >= 10
end until passed
end
end
ただし、例外が発生したときにレスキュー部分が実行されることはありません。なぜですか?
ありがとう!ドリアン
PS私はrspec2.6.0を使用しています