2012-05-09 23 views
6

URLヘルパー(例:root_url)は、アプリケーションコントローラとrspecの例で異なるホスト名を返します。 私は正常にこのようにアプリ私のレール内のURLヘルパーのためのドメインを設定することができました:Rails:rspecのURLヘルパーのホスト名が間違っています

class ApplicationController < ActionController::Base 
    def default_url_options 
    {host: "foo.com", only_path: false} 
    end 
end 

例えば、root_url出力は「http://foo.com/」アプリケーションが、「HTTP内:/ /example.com "を私の要求仕様に入れてください。これらのURLオプションをレール3.2にグローバルに適用して仕様に影響を与えるための推奨される方法は何ですか? urlオプションは動的である必要はありません。

答えて

4

で次のようになりダンの答えに追加するには、ホスト!廃止されました。あなたのrspec_helper.rbにこれらを追加します。

# Configure Capybara expected host 
Capybara.app_host = 'http://lvh.me:3000' 

# Configure actual routes host during test 
before(:each) do 
    if respond_to?(:default_url_options) 
    default_url_options[:host] = 'http://lvh.me:3000' 
    end 
end 
+0

注意:テストがcontroller/request/featureでない場合、これは失敗します。例えば、ヘルパー仕様は '未定義のローカル変数やメソッドdefault_url_options 'で失敗します。 – typeoneerror

2

あなたはRSpecの中に、あなたのテストに前のブロックにホストを設定することができます。

before :each do 
     host! 'hostgoeshere.com' 
    end 

あなたはグローバルに設定したい場合は、何か自分のspec_helper.rbファイルを置くことができます。

+0

あなたはについてのより具体的な何ができるか "何か" かもしれませんあれ? – denishaskin

4

はちょうどそれは、機能仕様ではspec_helper.rb

RSpec.configure do |config| 
    # other config options 
    config.before(:each) do 
    host! "localhost:3000" 
    end 
end 
+0

spec_helperで私のために動作しません:NoMethodError:未定義のメソッド 'host! '。私はRspec 3.2を使用しています。 –

0

私は両方のコントローラテストと機能テストとして、@request.hosthost!の多くのバリエーションを試みたが、成功せずにpost path, args, {'SERVER_NAME' => my_secret_domain}。非常に悪化し、他の多くの人がそのアプローチで成功を収めたと報告しています。

は私のためのソリューションでした:

request.headers["SERVER_NAME"] = my_secret_domain 
post path, args 

私はRSpecの、3.1.7とRailsのルビー2.1.5p273を実行している4.2.0

関連する問題