From d415eb4f6d6bb24b78b968ae28c22bb7e1721285 Mon Sep 17 00:00:00 2001 From: George Claghorn Date: Wed, 24 Jul 2019 22:19:21 -0400 Subject: Stop setting a default Capybara app host It's intended not to be set if Capybara starts the app server itself. Base Rails-generated URLs off of Capybara.current_session.server_url instead. --- Gemfile | 2 +- Gemfile.lock | 8 ++-- actionpack/CHANGELOG.md | 4 ++ actionpack/lib/action_dispatch/system_test_case.rb | 48 ++++++++++++---------- .../test_helpers/setup_and_teardown.rb | 11 ++--- .../system_testing/system_test_case_test.rb | 8 ++-- 6 files changed, 43 insertions(+), 38 deletions(-) diff --git a/Gemfile b/Gemfile index 52914b6698..3a7a564a35 100644 --- a/Gemfile +++ b/Gemfile @@ -9,7 +9,7 @@ gemspec # We need a newish Rake since Active Job sets its test tasks' descriptions. gem "rake", ">= 11.1" -gem "capybara", ">= 2.15" +gem "capybara", ">= 3.26" gem "selenium-webdriver", ">= 3.141.592" gem "rack-cache", "~> 1.2" diff --git a/Gemfile.lock b/Gemfile.lock index eb7dbf6877..0618bcf7ec 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -175,13 +175,13 @@ GEM bunny (2.13.0) amq-protocol (~> 2.3, >= 2.3.0) byebug (10.0.2) - capybara (3.10.1) + capybara (3.26.0) addressable mini_mime (>= 0.1.3) nokogiri (~> 1.8) rack (>= 1.6.0) rack-test (>= 0.6.3) - regexp_parser (~> 1.2) + regexp_parser (~> 1.5) xpath (~> 3.2) childprocess (1.0.1) rake (< 13.0) @@ -388,7 +388,7 @@ GEM redis (4.1.1) redis-namespace (1.6.0) redis (>= 3.0.4) - regexp_parser (1.3.0) + regexp_parser (1.6.0) representable (3.0.4) declarative (< 0.1.0) declarative-option (< 0.2.0) @@ -545,7 +545,7 @@ DEPENDENCIES blade-sauce_labs_plugin bootsnap (>= 1.4.4) byebug - capybara (>= 2.15) + capybara (>= 3.26) connection_pool dalli delayed_job diff --git a/actionpack/CHANGELOG.md b/actionpack/CHANGELOG.md index 9a6bd4bb45..99a4ac6845 100644 --- a/actionpack/CHANGELOG.md +++ b/actionpack/CHANGELOG.md @@ -1,3 +1,7 @@ +* System tests require Capybara 3.26 or newer. + + *George Claghorn* + * Reduced log noise handling ActionController::RoutingErrors. *Alberto Fernández-Capel* diff --git a/actionpack/lib/action_dispatch/system_test_case.rb b/actionpack/lib/action_dispatch/system_test_case.rb index 4fda2cf44f..aae96975c7 100644 --- a/actionpack/lib/action_dispatch/system_test_case.rb +++ b/actionpack/lib/action_dispatch/system_test_case.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -gem "capybara", ">= 2.15" +gem "capybara", ">= 3.26" require "capybara/dsl" require "capybara/minitest" @@ -119,17 +119,6 @@ module ActionDispatch def initialize(*) # :nodoc: super self.class.driver.use - @proxy_route = if ActionDispatch.test_app - Class.new do - include ActionDispatch.test_app.routes.url_helpers - - def url_options - default_url_options.merge(host: Capybara.app_host) - end - end.new - else - nil - end end def self.start_application # :nodoc: @@ -170,16 +159,33 @@ module ActionDispatch driven_by :selenium - def method_missing(method, *args, &block) - if @proxy_route.respond_to?(method) - @proxy_route.send(method, *args, &block) - else - super + private + def url_helpers + @url_helpers ||= + if ActionDispatch.test_app + Class.new do + include ActionDispatch.test_app.routes.url_helpers + + def url_options + default_url_options.reverse_merge(host: Capybara.app_host || Capybara.current_session.server_url) + end + end.new + end end - end - ActiveSupport.run_load_hooks(:action_dispatch_system_test_case, self) - end + def method_missing(name, *args, &block) + if url_helpers.respond_to?(name) + url_helpers.public_send(name, *args, &block) + else + super + end + end - SystemTestCase.start_application + def respond_to_missing?(name, include_private = false) + url_helpers.respond_to?(name) + end + end end + +ActiveSupport.run_load_hooks :action_dispatch_system_test_case, ActionDispatch::SystemTestCase +ActionDispatch::SystemTestCase.start_application diff --git a/actionpack/lib/action_dispatch/system_testing/test_helpers/setup_and_teardown.rb b/actionpack/lib/action_dispatch/system_testing/test_helpers/setup_and_teardown.rb index 20f6a7634f..30dc21ebb9 100644 --- a/actionpack/lib/action_dispatch/system_testing/test_helpers/setup_and_teardown.rb +++ b/actionpack/lib/action_dispatch/system_testing/test_helpers/setup_and_teardown.rb @@ -4,15 +4,12 @@ module ActionDispatch module SystemTesting module TestHelpers module SetupAndTeardown # :nodoc: - DEFAULT_HOST = "http://127.0.0.1" - def host!(host) - Capybara.app_host = host - end + ActiveSupport::Deprecation.warn \ + "ActionDispatch::SystemTestCase#host! is deprecated with no replacement. " \ + "Set Capybara.app_host directly or rely on Capybara's default host." - def before_setup - host! DEFAULT_HOST - super + Capybara.app_host = host end def before_teardown diff --git a/actionpack/test/dispatch/system_testing/system_test_case_test.rb b/actionpack/test/dispatch/system_testing/system_test_case_test.rb index 3319db1665..d235f7ad89 100644 --- a/actionpack/test/dispatch/system_testing/system_test_case_test.rb +++ b/actionpack/test/dispatch/system_testing/system_test_case_test.rb @@ -36,12 +36,10 @@ class SetDriverToSeleniumHeadlessFirefoxTest < DrivenBySeleniumWithHeadlessFiref end class SetHostTest < DrivenByRackTest - test "sets default host" do - assert_equal "http://127.0.0.1", Capybara.app_host - end - test "overrides host" do - host! "http://example.com" + assert_deprecated do + host! "http://example.com" + end assert_equal "http://example.com", Capybara.app_host end -- cgit v1.2.3