test.host in Rspec testing Rails redirect
Solution 1
To set the app host and server port with Capybara add the following lines to your spec/spec_helper.rb
file
Capybara.configure do |config|
config.app_host = 'http://127.0.0.1'
config.server_port = 3000
end
-- Edit #1
A nice overview of testing domains is available at http://blog.joncairns.com/2012/12/testing-domains-with-rails-and-test-unit/
Solution 2
Here's the workaround that seems to have fixed the issue for me:
In spec/rails_helper.rb add this
module ActionDispatch
class TestRequest
# Override host, by default it is test.host
def host
'localhost:3000'
end
end
end
Solution 3
This worked for me:
# spec/controllers/whatever_controller_spec.rb
before :each do
@request.host = '127.0.0.1:3000'
end
Based on the link @dan-reedy supplied. It is sublimely annoying to have to configure the exact same parameters in config/environments, spec/spec_helper.rb and again here... all in marginally different ways (with 'http://' or without, with port number or port specified separately). Even Capybara.configure
syntax can't seem to stay consistent to itself between versions...
But give it a try and see if that solves it.
conradkleinespel
Updated on July 19, 2022Comments
-
conradkleinespel almost 2 years
Here's a line from my
test.rb
environnment file in a Rails 3.1.12 app:config.action_mailer.default_url_options = config.action_controller.default_url_options = { :host => "127.0.0.1", :port => 3000 }
Now here's the test I make:
subject { get :success } subject.should redirect_to(:home)
This produces an error:
Failure/Error: subject.should redirect_to(:home) Expected response to be a redirect to <http://127.0.0.1:3000/> but was a redirect to <http://test.host/>
What did I do wrong? Or else, where the testing host be configured?
Here's the spec_helper.rb file for complete reference.
# This file is copied to spec/ when you run 'rails generate rspec:install' ENV["RAILS_ENV"] = 'test' require File.expand_path("../../config/environment", __FILE__) require 'rspec/rails' require 'rspec/autorun' require 'capybara/rspec' # Requires supporting ruby files with custom matchers and macros, etc, # in spec/support/ and its subdirectories. Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f} RSpec.configure do |config| # ## Mock Framework # # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line: # # config.mock_with :mocha # config.mock_with :flexmock # config.mock_with :rr # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures config.fixture_path = "#{::Rails.root}/spec/fixtures" # If you're not using ActiveRecord, or you'd prefer not to run each of your # examples within a transaction, remove the following line or assign false # instead of true. config.use_transactional_fixtures = true # If true, the base class of anonymous controllers will be inferred # automatically. This will be the default behavior in future versions of # rspec-rails. config.infer_base_class_for_anonymous_controllers = false # Run specs in random order to surface order dependencies. If you find an # order dependency and want to debug it, you can fix the order by providing # the seed, which is printed after each run. # --seed 1234 config.order = "random" end Capybara.configure do |config| config.app_host = 'http://127.0.0.1' config.server_port = 3000 end
-
Joshua Pinter over 3 yearsI'm still running into this on Rails 5.2 and rspec-rails 3.9. Ridiculous. Using
_path
instead of_url
for now to get around it. -
Tim Diggins about 3 yearsComprehensive answer: stackoverflow.com/a/29037481/109175
-
-
conradkleinespel about 11 yearsThis does not seem to work for me. I've updated the question with the spec helper content.
-
Dan Reedy about 11 yearsDo you still receive the same error message when you add the Capybara config options?
-
conradkleinespel about 11 yearsYes. Same error. To get around this, I've used
home_path
instead for now. But this doesn't check the domain, which is a problem on the long term.