Commit 0d4eb312 authored by Robert Speicher's avatar Robert Speicher

Add `allowing_for_delay` helper method for feature specs

cherry-picked
parent f323b8c4
......@@ -21,9 +21,10 @@ describe 'Profile > Preferences' do
it 'updates their preference' do
choose "user_theme_id_#{theme.id}"
visit page.current_path
expect(page).to have_checked_field("user_theme_id_#{theme.id}")
allowing_for_delay do
visit page.current_path
expect(page).to have_checked_field("user_theme_id_#{theme.id}")
end
end
it 'reflects the changes immediately' do
......@@ -46,9 +47,10 @@ describe 'Profile > Preferences' do
it 'updates their preference' do
choose 'user_color_scheme_id_5'
visit page.current_path
expect(page).to have_checked_field('user_color_scheme_id_5')
allowing_for_delay do
visit page.current_path
expect(page).to have_checked_field('user_color_scheme_id_5')
end
end
end
......
......@@ -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
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment