70

アクセスするドメインに応じて異なる動作をする Rails アプリケーションがあります (たとえば、www.myapp.com は user.myapp.com に対して異なる方法で呼び出します)。本番環境ではこれで問題なく動作しますが、私のテスト コードでは常に "www.example.com" のホスト名が表示されます。

アクセスするふりをしているホスト名をテストに指定させる明確な方法はありますか?

4

10 に答える 10

112

ここではすべての答えが不完全だと思います...考えられるすべてのケースを列挙するには:

  • 統合仕様(から継承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"
    

    @AminArianaの回答から

  • 仕様を表示(から継承ActionView::TestCase)

    @request.host = 'my.awesome.host'
    

    ...または RSpec を介して:

    controller.request.host = "my.awesome.host"
    

    rspec-rails ビュー仕様のドキュメントを参照してください。

于 2015-03-13T16:36:58.393 に答える
35
@request.host = 'user.myapp.com'
于 2009-03-01T02:33:03.063 に答える
26

機能仕様

機能仕様では、ホスト! 廃止されました。これらをあなたに追加してください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
于 2015-02-23T21:27:45.043 に答える
3

@request.host = 'user.myapp.com'正しくありません。使用する必要がありますhost!('user.myapp.com')

于 2010-06-18T03:29:40.333 に答える
1

その時点で他の回答で提案された方法はどれも私にとってはうまくいきませんでした。これはうまくいきました:

Capybara.configure { |config| config.default_host = "my.domain.com" }
于 2018-02-19T11:43:20.097 に答える