Url帮助程序(例如root_url)在app控制器和rspec示例中返回不同的主机名。 我已成功地在我的rails应用程序中为url helpers设置域,如下所示:
class ApplicationController < ActionController::Base
def default_url_options
{host: "foo.com", only_path: false}
end
end
例如,root_url输出&#34; http://foo.com/"在应用程序中但是&#34; http://example.com"在我的请求规格。在rails 3.2中全局应用这些url选项的建议方法是什么,以便它们影响我的规范? 网址选项不需要是动态的。
答案 0 :(得分:5)
在功能规格中,主机!已被弃用。将这些添加到您的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
答案 1 :(得分:3)
只是为了补充Dan的答案,它在spec_helper.rb中看起来像这样
RSpec.configure do |config|
# other config options
config.before(:each) do
host! "localhost:3000"
end
end
答案 2 :(得分:2)
您可以在rspec中的测试前块中设置主机:
before :each do
host! 'hostgoeshere.com'
end
如果你想全局设置它,可以放一些你的spec_helper.rb文件。
答案 3 :(得分:1)
我尝试了@request.host
,host!
和post path, args, {'SERVER_NAME' => my_secret_domain}
的许多变体而没有成功,无论是作为控制器测试还是功能测试。非常恶化,因为许多其他人报告说这些方法取得了成功。
我的解决方案是:
request.headers["SERVER_NAME"] = my_secret_domain
post path, args
我正在运行ruby 2.1.5p273,rspec 3.1.7和Rails 4.2.0