之前我在ActionController::IntegrationTest
中使用
get '/', {}, {:user_agent => "Googlebot"}
但这似乎在Rails 3中不再起作用。
我该怎么办?
答案 0 :(得分:43)
如果在应用程序中使用request.user_agent,则可以编写以下代码:
get '/', {}, { "HTTP_USER_AGENT" => "Googlebot" }
答案 1 :(得分:15)
上述答案都不适用于我,以下是最终在rspec控制器测试中起作用的内容:
@request.user_agent = "a MobileDevice/User-Agent"
post :endpoint, param: 2354
答案 2 :(得分:7)
我修复了这种行为,使用Rails 4.0,您将能够在集成和功能测试中指定实际的HTTP标头,如“User-Agent”和“Content-Type”。不再需要将它们指定为CGI变量。
如果您有兴趣,可以查看更改:https://github.com/rails/rails/pull/9700
答案 3 :(得分:3)
如果您有一系列需要特定用户代理的规范,您可能会发现以下内容有助于干扰您的规范:
在某处定义此内容(例如spec_helper.rb
):
module DefaultUserAgent
def post(uri, params = {}, session = {})
super uri, params, {'HTTP_USER_AGENT' => MY_USER_AGENT}.merge(session)
end
def get(uri, params = {}, session = {})
super uri, params, {'HTTP_USER_AGENT' => MY_USER_AGENT}.merge(session)
end
end
然后只需include DefaultUserAgent
即可。
答案 4 :(得分:3)
对于我自己来说,在rspec3的控制器测试中,我使用了
request.env["HTTP_USER_AGENT"] = "Hello"
在提出请求之前
答案 5 :(得分:2)
我能够使用以下方法在Rails 5.2.1上工作:
get '/path', headers: { 'HTTP_USER_AGENT' => 'Mozilla/5.0 (blah blah)' }
我在here中寻找了该方法可接受的关键字。
答案 6 :(得分:-1)
用户代理只是一个http标头,因此您应该可以使用此处的方法:http://guides.rubyonrails.org/testing.html#helpers-available-for-integration-tests
并将用户代理传递给标题(我没有对此进行测试):
headers = {"User-Agent" => "Googlebot"}
request_via_redirect(:get, '/', {}, headers)