Skip to content

Commit

Permalink
Stop setting a default Capybara app host
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
georgeclaghorn committed Jul 25, 2019
1 parent 49b531b commit 78c7343
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 38 deletions.
2 changes: 1 addition & 1 deletion Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
8 changes: 4 additions & 4 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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
Expand Down
4 changes: 4 additions & 0 deletions actionpack/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
* System tests require Capybara 3.26 or newer.

*George Claghorn*

* Reduced log noise handling ActionController::RoutingErrors.

*Alberto Fernández-Capel*
Expand Down
48 changes: 27 additions & 21 deletions actionpack/lib/action_dispatch/system_test_case.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# frozen_string_literal: true

gem "capybara", ">= 2.15"
gem "capybara", ">= 3.26"

require "capybara/dsl"
require "capybara/minitest"
Expand Down Expand Up @@ -119,17 +119,6 @@ class SystemTestCase < ActiveSupport::TestCase
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:
Expand Down Expand Up @@ -170,16 +159,33 @@ def self.driven_by(driver, using: :chrome, screen_size: [1400, 1400], options: {

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
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 78c7343

Please sign in to comment.