diff --git a/Gemfile b/Gemfile index 35dd58cd459..25829f8eeff 100644 --- a/Gemfile +++ b/Gemfile @@ -106,6 +106,7 @@ group :test do gem 'rack_session_access' gem 'rails-controller-testing' gem 'rspec_junit_formatter' + gem 'rspec-retry' gem 'selenium-devtools' gem 'selenium-webdriver' gem 'shoulda-matchers', require: false diff --git a/Gemfile.lock b/Gemfile.lock index a1f738cf196..dda1c8814ba 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -601,6 +601,8 @@ GEM rspec-expectations (~> 3.11) rspec-mocks (~> 3.11) rspec-support (~> 3.11) + rspec-retry (0.6.2) + rspec-core (> 3.3) rspec-support (3.12.0) rspec_junit_formatter (0.4.1) rspec-core (>= 2, < 4, != 2.12.0) @@ -895,6 +897,7 @@ DEPENDENCIES rexml rqrcode rspec-rails + rspec-retry rspec_junit_formatter rubocop rubocop-performance diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index b0478d438c5..9a04c869778 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -16,6 +16,7 @@ # users commonly want. # # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration +require 'rspec/retry' RSpec.configure do |config| config.filter_run_excluding disable: true @@ -59,3 +60,18 @@ end end end + +RSpec.configure do |config| + # show retry status in spec process + config.verbose_retry = true + # show exception that triggers a retry if verbose_retry is set to true + config.display_try_failure_messages = true + + # callback to be run between retries + config.retry_callback = proc do |ex| + # run some additional clean up task - can be filtered by example metadata + if ex.metadata[:js] + Capybara.reset! + end + end +end diff --git a/spec/system/users/brouillon_spec.rb b/spec/system/users/brouillon_spec.rb index 1d718272472..2a36990836a 100644 --- a/spec/system/users/brouillon_spec.rb +++ b/spec/system/users/brouillon_spec.rb @@ -6,7 +6,7 @@ let(:user_dossier) { user.dossiers.first } let!(:dossier_to_link) { create(:dossier) } - scenario 'fill a dossier', js: true do + scenario 'fill a dossier', js: true, retry: 3 do log_in(user, procedure) fill_individual diff --git a/spec/system/users/dossier_shared_examples.rb b/spec/system/users/dossier_shared_examples.rb index 67910e14779..638a9ae96b4 100644 --- a/spec/system/users/dossier_shared_examples.rb +++ b/spec/system/users/dossier_shared_examples.rb @@ -1,5 +1,5 @@ RSpec.shared_examples 'the user can edit the submitted demande' do - scenario js: true do + scenario js: true, retry: 3 do visit dossier_path(dossier) expect(page).to have_current_path(dossier_path(dossier))