2012-05-09 18 views
6

Url助手(例如root_url)在應用程序控制器vs rspec示例中返回不同的主機名。 我已成功能夠設置網址助手域在我的Rails應用程序是這樣的: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「在我的請求規格。在rails 3.2中全局應用這些url選項的建議方法是什麼,以便它們影響我的規格? 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

僅供參考,如果測試不是控制器/請求/功能,則失敗。例如,一個Helper規範會因'未定義的局部變量或方法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 

我運行紅寶石2.1.5p273,rspec的3.1.7和Rails 4.2.0