10

test.rbRails 3.1.12 アプリの環境ファイルの行は次のとおりです。

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
4

3 に答える 3

6

Capybara でアプリのホストとサーバー ポートを設定するには、次の行を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/を参照してください。

于 2013-03-14T16:38:36.017 に答える
3

これは私のために働いた:

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

提供されたリンク @dan-reedy に基づいています。config/environments、spec/spec_helper.rb、そしてここでもまったく同じパラメーターを構成する必要があるのは非常に面倒です...すべてわずかに異なる方法で (「http://」を使用するかどうか、ポート番号またはポートを指定して)別々に)。構文でさえCapybara.configure、バージョン間で一貫性を保つことができないようです...

しかし、試してみて、それが解決するかどうかを確認してください。

于 2015-07-18T04:28:55.867 に答える