アクセスするドメインに応じて異なる動作をする Rails アプリケーションがあります (たとえば、www.myapp.com は user.myapp.com に対して異なる方法で呼び出します)。本番環境ではこれで問題なく動作しますが、私のテスト コードでは常に "www.example.com" のホスト名が表示されます。
アクセスするふりをしているホスト名をテストに指定させる明確な方法はありますか?
アクセスするドメインに応じて異なる動作をする Rails アプリケーションがあります (たとえば、www.myapp.com は user.myapp.com に対して異なる方法で呼び出します)。本番環境ではこれで問題なく動作しますが、私のテスト コードでは常に "www.example.com" のホスト名が表示されます。
アクセスするふりをしているホスト名をテストに指定させる明確な方法はありますか?
ここではすべての答えが不完全だと思います...考えられるすべてのケースを列挙するには:
統合仕様(から継承ActionDispatch::IntegrationTest
):
host! "my.awesome.host"
ドキュメントのセクション 5.1 Helpers Available for Integration Testsを参照してください。
コントローラの仕様(から継承ActionController::TestCase
)
@request.host = 'my.awesome.host'
ドキュメントのセクション 4.4インスタンス変数を参照してください。
機能仕様 (Capybara 経由)
Capybara.default_host = "http://my.awesome.host"
# Or to configure domain for route helpers:
default_url_options[:host] = "my.awesome.host"
仕様を表示(から継承ActionView::TestCase
)
@request.host = 'my.awesome.host'
...または RSpec を介して:
controller.request.host = "my.awesome.host"
rspec-rails
ビュー仕様のドキュメントを参照してください。
@request.host = 'user.myapp.com'
機能仕様では、ホスト! 廃止されました。これらをあなたに追加してくださいspec_helper.rb
:
# Configure Capybara expected host
Capybara.app_host = "http://test.domain"
# Configure actual routes host during test
before(:each) do
default_url_options[:host] = <myhost>
end
リクエストスペックでは引き続きホストを使おう!:
host! "test.domain"
または、ブロック単位でリファクタリングするか、レベルbefore(:each)
で要求仕様に対してグローバルに構成します。spec_helper.rb
RSpec.configure do |config|
config.before(:each, type: :request) do
host! "test.domain"
end
end
@request.host = 'user.myapp.com'
正しくありません。使用する必要がありますhost!('user.myapp.com')
その時点で他の回答で提案された方法はどれも私にとってはうまくいきませんでした。これはうまくいきました:
Capybara.configure { |config| config.default_host = "my.domain.com" }