summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOswaldo Ferreira <oswaldo@gitlab.com>2017-05-07 15:41:47 -0300
committerOswaldo Ferreira <oswaldo@gitlab.com>2017-05-07 15:41:47 -0300
commit579d35aa1f4da5401f9fd61e634d66f278f1e7a4 (patch)
treeae646e0efb4311721da28bebc092fe70b73cb268
parent3b03989cfeb198a0f06ca6e44bc1f15c2d20f030 (diff)
downloadgitlab-ce-579d35aa1f4da5401f9fd61e634d66f278f1e7a4.tar.gz
Improve request blocker middleware to support Vue requests
-rw-r--r--features/support/env.rb12
-rw-r--r--spec/support/wait_for_requests.rb8
-rw-r--r--spec/support/wait_for_vue_resource.rb10
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