From b46fff83c804ec7b56d4918a8e909a571b8c4f62 Mon Sep 17 00:00:00 2001 From: MariaAga Date: Thu, 27 Feb 2025 11:19:44 +0000 Subject: [PATCH] Fixes #38246 - Show console logs in rails tests --- developer_docs/foreman_dev_setup.asciidoc | 4 ++++ test/integration_test_helper.rb | 23 ++++++++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/developer_docs/foreman_dev_setup.asciidoc b/developer_docs/foreman_dev_setup.asciidoc index ed364b727d2..3ecf8a094ad 100644 --- a/developer_docs/foreman_dev_setup.asciidoc +++ b/developer_docs/foreman_dev_setup.asciidoc @@ -206,6 +206,10 @@ Foreman's integration tests use the https://github.com/teamcapybara/capybara[Cap Adding `DEBUG_JS_TEST=1` to the test run, will open a web browser and run the tests in chrome. +To print the warning and error javascript logs within your test, include `puts page.driver.browser.logs.get(:browser)` in the test run. +Adding `SHOW_JS_LOG=1` to the test run will enable all levels of javascript logs for viewing. + + To run Foreman's integration tests: [source, shell] .... diff --git a/test/integration_test_helper.rb b/test/integration_test_helper.rb index 803e27130a4..7032052453b 100644 --- a/test/integration_test_helper.rb +++ b/test/integration_test_helper.rb @@ -21,7 +21,15 @@ Selenium::WebDriver::Chrome::Service.driver_path = ENV['TESTDRIVER_PATH'] || Foreman::Util.which('chromedriver', Rails.root.join('node_modules', '.bin')) -javascript_driver = ENV.fetch("JS_TEST_DRIVER") { ENV['DEBUG_JS_TEST'] ? :selenium_chrome : :selenium_chrome_headless }.to_sym +javascript_driver = ENV.fetch("JS_TEST_DRIVER") do + if ENV['SHOW_JS_LOG'] + :logging_selenium_chrome + elsif ENV['DEBUG_JS_TEST'] + :selenium_chrome + else + :selenium_chrome_headless + end +end.to_sym def chrome_options options = Selenium::WebDriver::Chrome::Options.new @@ -51,6 +59,19 @@ def chrome_options browser: :chrome, options: options) end +elsif javascript_driver == :logging_selenium_chrome + ShowMeTheCookies.register_adapter(javascript_driver, ShowMeTheCookies::SeleniumChrome) + options = chrome_options + options.add_option("goog:loggingPrefs", {browser: 'ALL'}) + unless ENV['DEBUG_JS_TEST'] + options.args << '--headless' + end + Capybara.register_driver javascript_driver do |app| + Capybara::Selenium::Driver.new( + app, + browser: :chrome, + options: options) + end else Capybara.register_driver javascript_driver do |app| Capybara::Selenium::Driver.new(