diff options
author | Mike Greiling <mike@pixelcog.com> | 2018-04-12 17:32:20 -0500 |
---|---|---|
committer | Mike Greiling <mike@pixelcog.com> | 2018-04-13 01:27:50 -0500 |
commit | 36373af3c753558577ccb09ce173e72709c656b6 (patch) | |
tree | 6ddf23a2267cd887ed7e747b54b1cdedda96394b /spec/support/capybara.rb | |
parent | 2a7d011afd2a25eaa8ad07fac5b2a5113b06c458 (diff) | |
download | gitlab-ce-36373af3c753558577ccb09ce173e72709c656b6.tar.gz |
display relevant browser console output whenever an integration test fails
Diffstat (limited to 'spec/support/capybara.rb')
-rw-r--r-- | spec/support/capybara.rb | 19 |
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();") |