From 2f469a90798dd9e587b65588a778eccda816fedc Mon Sep 17 00:00:00 2001 From: Daniel Illi Date: Thu, 24 Aug 2023 14:32:06 +0200 Subject: [PATCH] Retry capybara tests on specific errors, fix error handler --- test/support/retry_on_flaky_tests.rb | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/test/support/retry_on_flaky_tests.rb b/test/support/retry_on_flaky_tests.rb index 34ca02e6..4ad11619 100644 --- a/test/support/retry_on_flaky_tests.rb +++ b/test/support/retry_on_flaky_tests.rb @@ -4,26 +4,27 @@ # prepend RetryOnFlakyTests[FlakyError, AnotherFlakyError, max_tries: 3] # end -class RetryOnFlakyTests < Module +module RetryOnFlakyTests def self.[](*error_classes, max_tries: 3) Module.new do - define_method :run do - tries ||= 1 - super() - rescue *error_classes => err - raise unless (tries +=1) <= max_tries + define_method :max_tries do + max_tries + end - puts "Got #{err.class.name} Error, trying again #{tries}. time" - retry + define_method :error_classes do + error_classes end - define_method :capture_exceptions do |&block| - block.call + def capture_exceptions + tries ||= 1 + + yield rescue => err - if error_classes.include?(err.class) - raise + if (tries +=1) <= max_tries && error_classes.include?(err.class) + puts "Got #{err.message} Error, trying again #{tries}. time" + retry else - super(&->{ raise err }) + super { raise err } end end end