# rubocop:disable Style/GlobalVars require 'capybara/rails' require 'capybara/rspec' require 'capybara-screenshot/rspec' require 'selenium-webdriver' # Give CI some extra time timeout = (ENV['CI'] || ENV['CI_SERVER']) ? 60 : 30 Capybara.javascript_driver = :chrome Capybara.register_driver :chrome do |app| capabilities = Selenium::WebDriver::Remote::Capabilities.chrome( chromeOptions: { 'args' => %w[headless no-sandbox disable-gpu --window-size=1240,1400] } ) Capybara::Selenium::Driver .new(app, browser: :chrome, desired_capabilities: capabilities) end Capybara.default_max_wait_time = timeout Capybara.ignore_hidden_elements = true # Keep only the screenshots generated from the last failing test suite Capybara::Screenshot.prune_strategy = :keep_last_run # From https://github.com/mattheworiordan/capybara-screenshot/issues/84#issuecomment-41219326 Capybara::Screenshot.register_driver(:chrome) do |driver, path| driver.browser.save_screenshot(path) end RSpec.configure do |config| config.before(:context, :js) do next if $capybara_server_already_started TestEnv.eager_load_driver_server $capybara_server_already_started = true end config.before(:example, :js) do allow(Gitlab::Application.routes).to receive(:default_url_options).and_return( host: Capybara.current_session.server.host, port: Capybara.current_session.server.port, protocol: 'http') end config.after(:example, :js) do |example| # capybara/rspec already calls Capybara.reset_sessions! in an `after` hook, # but `block_and_wait_for_requests_complete` is called before it so by # calling it explicitely here, we prevent any new requests from being fired # See https://github.com/teamcapybara/capybara/blob/ffb41cfad620de1961bb49b1562a9fa9b28c0903/lib/capybara/rspec.rb#L20-L25 # We don't reset the session when the example failed, because we need capybara-screenshot to have access to it. Capybara.reset_sessions! unless example.exception block_and_wait_for_requests_complete end end