summaryrefslogtreecommitdiff
path: root/spec/support/capybara.rb
diff options
context:
space:
mode:
authorRobert Speicher <rspeicher@gmail.com>2015-06-14 20:33:29 -0400
committerRobert Speicher <rspeicher@gmail.com>2015-06-14 20:33:29 -0400
commitb00f447db4d76d453aa65ebd743da3a6bbe281f2 (patch)
tree0dda43a1e20abfb04e4051327af80ff37cc0e97a /spec/support/capybara.rb
parent8ae13c7a51556a3bd4aa2f0eefc2693972166aa8 (diff)
downloadgitlab-ce-b00f447db4d76d453aa65ebd743da3a6bbe281f2.tar.gz
Add `allowing_for_delay` helper method for feature specs
Diffstat (limited to 'spec/support/capybara.rb')
-rw-r--r--spec/support/capybara.rb33
1 files changed, 33 insertions, 0 deletions
diff --git a/spec/support/capybara.rb b/spec/support/capybara.rb
index fed1ab6ee33..3e41aec425a 100644
--- a/spec/support/capybara.rb
+++ b/spec/support/capybara.rb
@@ -19,3 +19,36 @@ unless ENV['CI'] || ENV['CI_SERVER']
# Keep only the screenshots generated from the last failing test suite
Capybara::Screenshot.prune_strategy = :keep_last_run
end
+
+module CapybaraHelpers
+ # Execute a block a certain number of times before considering it a failure
+ #
+ # The given block is called, and if it raises a `Capybara::ExpectationNotMet`
+ # error, we wait `interval` seconds and then try again, until `retries` is
+ # met.
+ #
+ # This allows for better handling of timing-sensitive expectations in a
+ # sketchy CI environment, for example.
+ #
+ # interval - Delay between retries in seconds (default: 0.5)
+ # retries - Number of times to execute before failing (default: 5)
+ def allowing_for_delay(interval: 0.5, retries: 5)
+ tries = 0
+
+ begin
+ yield
+ rescue Capybara::ExpectationNotMet => ex
+ if tries <= retries
+ tries += 1
+ sleep interval
+ retry
+ else
+ raise ex
+ end
+ end
+ end
+end
+
+RSpec.configure do |config|
+ config.include CapybaraHelpers, type: :feature
+end