是否有可能在轨道集成testing或规范中指定用户代理?
我之前在一个ActionController::IntegrationTest
中的rails 2应用程序中执行此操作
get '/', {}, {:user_agent => "Googlebot"}
但是这在Rails 3中似乎不再适用。
我该怎么办?
如果您在应用程序中使用request.user_agent,则可以编写以下代码:
get '/', {}, { "HTTP_USER_AGENT" => "Googlebot" }
以上答案都不适用于我,以下是最终在rspec控制器testing中的工作:
@request.user_agent = "a MobileDevice/User-Agent" post :endpoint, param: 2354
我解决了这个问题,在Rails 4.0中,你将能够在集成和functiontesting中指定实际的HTTP Headers,比如“User-Agent”和“Content-Type”。 不再需要将它们指定为CGIvariables。
如果你有兴趣,你可以看看这个变化: https : //github.com/rails/rails/pull/9700
如果您有一系列需要特定用户代理的规格,您可能会发现以下内容有助于干化您的规格:
定义这个地方(例如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
。
对于我自己,在rspec3中的一个控制器testing中,我使用了
request.env["HTTP_USER_AGENT"] = "Hello"
在提出请求之前
用户代理只是一个http头,所以你应该可以使用这里的方法: http : //guides.rubyonrails.org/testing.html#helpers-available-for-integration-tests
并传入用户代理到标题(我没有testing这个):
headers = {"User-Agent" => "Googlebot"} request_via_redirect(:get, '/', {}, headers)