diff options
author | Oswaldo Ferreira <oswaldo@gitlab.com> | 2017-05-07 15:41:47 -0300 |
---|---|---|
committer | Oswaldo Ferreira <oswaldo@gitlab.com> | 2017-05-07 15:41:47 -0300 |
commit | 579d35aa1f4da5401f9fd61e634d66f278f1e7a4 (patch) | |
tree | ae646e0efb4311721da28bebc092fe70b73cb268 | |
parent | 3b03989cfeb198a0f06ca6e44bc1f15c2d20f030 (diff) | |
download | gitlab-ce-579d35aa1f4da5401f9fd61e634d66f278f1e7a4.tar.gz |
Improve request blocker middleware to support Vue requests
-rw-r--r-- | features/support/env.rb | 12 | ||||
-rw-r--r-- | spec/support/wait_for_requests.rb | 8 | ||||
-rw-r--r-- | spec/support/wait_for_vue_resource.rb | 10 |
3 files changed, 23 insertions, 7 deletions
diff --git a/features/support/env.rb b/features/support/env.rb index db4179042a9..568eeae4479 100644 --- a/features/support/env.rb +++ b/features/support/env.rb @@ -30,12 +30,12 @@ Spinach.hooks.before_run do include FactoryGirl::Syntax::Methods end -# Spinach.hooks.after_feature do |feature_data| -# if feature_data.scenarios.flat_map(&:tags).include?('javascript') -# include WaitForRequests -# wait_for_requests_complete -# end -# end +Spinach.hooks.after_feature do |feature_data| + if feature_data.scenarios.flat_map(&:tags).include?('javascript') + include WaitForRequests + wait_for_requests_complete + end +end module StdoutReporterWithScenarioLocation # Override the standard reporter to show filename and line number next to each diff --git a/spec/support/wait_for_requests.rb b/spec/support/wait_for_requests.rb index 73da23391ee..a18c8e03aa6 100644 --- a/spec/support/wait_for_requests.rb +++ b/spec/support/wait_for_requests.rb @@ -1,20 +1,26 @@ require_relative './wait_for_ajax' +require_relative './wait_for_vue_resource' module WaitForRequests extend self include WaitForAjax + include WaitForVueResource # This is inspired by http://www.salsify.com/blog/engineering/tearing-capybara-ajax-tests def wait_for_requests_complete Gitlab::Testing::RequestBlockerMiddleware.block_requests! wait_for('pending AJAX requests complete') do Gitlab::Testing::RequestBlockerMiddleware.num_active_requests.zero? && - finished_all_ajax_requests? + finished_all_requests? end ensure Gitlab::Testing::RequestBlockerMiddleware.allow_requests! end + def finished_all_requests? + finished_all_ajax_requests? && finished_all_vue_resource_requests? + end + # Waits until the passed block returns true def wait_for(condition_name, max_wait_time: Capybara.default_max_wait_time, polling_interval: 0.01) wait_until = Time.now + max_wait_time.seconds diff --git a/spec/support/wait_for_vue_resource.rb b/spec/support/wait_for_vue_resource.rb index 4a4e2e16ee7..21ae8746fab 100644 --- a/spec/support/wait_for_vue_resource.rb +++ b/spec/support/wait_for_vue_resource.rb @@ -4,4 +4,14 @@ module WaitForVueResource loop until page.evaluate_script('window.activeVueResources').zero? end end + + def finished_all_vue_resource_requests? + return true unless javascript_test? + + page.evaluate_script('window.activeVueResources').zero? + end + + def javascript_test? + Capybara.current_driver == Capybara.javascript_driver + end end |