是否可以在rails集成测试或规范中指定用户代理?

Joh*_*hir 37 integration-testing ruby-on-rails

我之前在轨道2的应用程序在做这个ActionController::IntegrationTest

get '/', {}, {:user_agent => "Googlebot"}
Run Code Online (Sandbox Code Playgroud)

但这似乎在Rails 3中不再起作用了.

我该怎么办?

小智 43

如果在应用程序中使用request.user_agent,则可以编写以下代码:

get '/', {}, { "HTTP_USER_AGENT" => "Googlebot" }
Run Code Online (Sandbox Code Playgroud)

  • 这不适用于Rails 3.1.`get`的第三个参数指定会话哈希,而不是HTTP头. (3认同)
  • 这记录在哪里? (2认同)

Ale*_*lav 15

上述答案都不适用于我,以下是最终在rspec控制器测试中工作的内容:

@request.user_agent = "a MobileDevice/User-Agent"
post :endpoint, param: 2354
Run Code Online (Sandbox Code Playgroud)

  • nil:NilClass 的未定义方法 `user_agent=' (2认同)

Yve*_*enn 7

我修复了这种行为,使用Rails 4.0,您将能够在集成和功能测试中指定实际的HTTP标头,如"User-Agent"和"Content-Type".不再需要将它们指定为CGI变量.

如果您有兴趣,可以查看更改:https://github.com/rails/rails/pull/9700


小智 6

我能够使用它在 Rails 5.2.1 上工作:

get '/path', headers: { 'HTTP_USER_AGENT' => 'Mozilla/5.0 (blah blah)' }
Run Code Online (Sandbox Code Playgroud)

在这里查找了该方法可接受的关键字。