2013-03-14 2 views
6

Вот строки из моего файла test.rb environnment в приложении Rails 3.1.12:test.host в Rspec тестирования Rails перенаправляет

config.action_mailer.default_url_options = config.action_controller.default_url_options = { :host => "127.0.0.1", :port => 3000 } 

Теперь вот тест я делаю:

subject { get :success } 
subject.should redirect_to(:home) 

Это дает ошибка:

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/> 

Что я сделал не так? Или, где настроен хост тестирования?

Вот полный файл spec_helper.rb.

# 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 

ответ

6

Чтобы установить хост приложения и порт сервера с Капибарой добавьте следующие строки в файл spec/spec_helper.rb

Capybara.configure do |config| 
    config.app_host = 'http://127.0.0.1' 
    config.server_port = 3000 
end 

- Изменить # 1

Хорошего обзор тестирования доменов доступен на http://blog.joncairns.com/2012/12/testing-domains-with-rails-and-test-unit/

+1

Это не похоже на работу для меня. Я обновил этот вопрос с помощью содержимого вспомогательного содержимого. – conradkdotcom

+0

Получаете ли вы такое же сообщение об ошибке при добавлении опций конфигурации Capybara? –

+1

Да. Такая же ошибка. Чтобы обойти это, я использовал вместо этого 'home_path'. Но это не проверяет домен, что является проблемой в долгосрочной перспективе. – conradkdotcom

2

Это работает для меня:

# spec/controllers/whatever_controller_spec.rb 
before :each do 
    @request.host = '127.0.0.1:3000' 
end 

На основании ссылки @ dan-reedy прилагается. Поразительно раздражать, чтобы настроить точно такие же параметры в config/environment, spec/spec_helper.rb и снова здесь ... все в несколько разных вариантах (с «http: //» или без, с номером порта или указанным портом в отдельности). Даже Capybara.configure синтаксис не может оставаться согласованным между собой между версиями ...

Но попробуйте и посмотрите, не решит ли это его.

0

Вот обходной путь, который, похоже, закрепилась вопрос для меня:

В спецификации/rails_helper.rb добавить

module ActionDispatch 
    class TestRequest 
    # Override host, by default it is test.host 
    def host 
     'localhost:3000' 
    end 
    end 
end