Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Greiling <mike@pixelcog.com>2018-04-13 01:32:20 +0300
committerMike Greiling <mike@pixelcog.com>2018-04-13 09:27:50 +0300
commit36373af3c753558577ccb09ce173e72709c656b6 (patch)
tree6ddf23a2267cd887ed7e747b54b1cdedda96394b /spec/support/capybara.rb
parent2a7d011afd2a25eaa8ad07fac5b2a5113b06c458 (diff)
display relevant browser console output whenever an integration test fails
Diffstat (limited to 'spec/support/capybara.rb')
-rw-r--r--spec/support/capybara.rb19
1 files changed, 19 insertions, 0 deletions
diff --git a/spec/support/capybara.rb b/spec/support/capybara.rb
index 8603b7f3e2c..b8b44e001db 100644
--- a/spec/support/capybara.rb
+++ b/spec/support/capybara.rb
@@ -7,6 +7,16 @@ require 'selenium-webdriver'
# Give CI some extra time
timeout = (ENV['CI'] || ENV['CI_SERVER']) ? 60 : 30
+# Define an error class for JS console messages
+JSConsoleError = Class.new(StandardError)
+
+# Filter out innocuous JS console messages
+JS_CONSOLE_FILTER = Regexp.union([
+ '"[HMR] Waiting for update signal from WDS..."',
+ '"[WDS] Hot Module Replacement enabled."',
+ "Download the Vue Devtools extension"
+])
+
Capybara.register_driver :chrome do |app|
capabilities = Selenium::WebDriver::Remote::Capabilities.chrome(
# This enables access to logs with `page.driver.manage.get_log(:browser)`
@@ -78,6 +88,15 @@ RSpec.configure do |config|
end
config.after(:example, :js) do |example|
+ # when a test fails, display any messages in the browser's console
+ if example.exception
+ console = page.driver.browser.manage.logs.get(:browser).try(:reject) { |log| log.message =~ JS_CONSOLE_FILTER }
+ if console.present?
+ message = "Unexpected browser console output:\n" + console.map(&:message).join("\n")
+ raise JSConsoleError, message
+ end
+ end
+
# prevent localStorage from introducing side effects based on test order
unless ['', 'about:blank', 'data:,'].include? Capybara.current_session.driver.browser.current_url
execute_script("localStorage.clear();")