Commit b00f447d authored by Robert Speicher's avatar Robert Speicher

Add `allowing_for_delay` helper method for feature specs

parent 8ae13c7a
...@@ -21,10 +21,11 @@ describe 'Profile > Preferences' do ...@@ -21,10 +21,11 @@ describe 'Profile > Preferences' do
it 'updates their preference' do it 'updates their preference' do
choose "user_theme_id_#{theme.id}" choose "user_theme_id_#{theme.id}"
allowing_for_delay do
visit page.current_path visit page.current_path
expect(page).to have_checked_field("user_theme_id_#{theme.id}") expect(page).to have_checked_field("user_theme_id_#{theme.id}")
end end
end
it 'reflects the changes immediately' do it 'reflects the changes immediately' do
expect(page).to have_selector("body.#{default.css_class}") expect(page).to have_selector("body.#{default.css_class}")
...@@ -46,11 +47,12 @@ describe 'Profile > Preferences' do ...@@ -46,11 +47,12 @@ describe 'Profile > Preferences' do
it 'updates their preference' do it 'updates their preference' do
choose 'user_color_scheme_id_5' choose 'user_color_scheme_id_5'
allowing_for_delay do
visit page.current_path visit page.current_path
expect(page).to have_checked_field('user_color_scheme_id_5') expect(page).to have_checked_field('user_color_scheme_id_5')
end end
end end
end
describe 'User changes their default dashboard' do describe 'User changes their default dashboard' do
it 'creates a flash message' do it 'creates a flash message' do
......
...@@ -19,3 +19,36 @@ unless ENV['CI'] || ENV['CI_SERVER'] ...@@ -19,3 +19,36 @@ unless ENV['CI'] || ENV['CI_SERVER']
# Keep only the screenshots generated from the last failing test suite # Keep only the screenshots generated from the last failing test suite
Capybara::Screenshot.prune_strategy = :keep_last_run Capybara::Screenshot.prune_strategy = :keep_last_run
end 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