summaryrefslogtreecommitdiff
path: root/spec/support/capybara_helpers.rb
diff options
context:
space:
mode:
authorRobert Speicher <rspeicher@gmail.com>2015-06-17 21:27:38 -0400
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2015-06-22 12:13:47 +0200
commitda135119aac4befd0ef13cae519c165366a0568b (patch)
treecffe3c2a379e35b1f67a746d0e830e55c67c4809 /spec/support/capybara_helpers.rb
parentef206b7977cef355c3f11bef333209d0f6714483 (diff)
downloadgitlab-ce-da135119aac4befd0ef13cae519c165366a0568b.tar.gz
Move CapybaraHelpers to its own support file
In case we end up wanting to use it in Spinach as well.
Diffstat (limited to 'spec/support/capybara_helpers.rb')
-rw-r--r--spec/support/capybara_helpers.rb32
1 files changed, 32 insertions, 0 deletions
diff --git a/spec/support/capybara_helpers.rb b/spec/support/capybara_helpers.rb
new file mode 100644
index 00000000000..5356a3b588d
--- /dev/null
+++ b/spec/support/capybara_helpers.rb
@@ -0,0 +1,32 @@
+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