Pregunta ¿Es posible especificar un agente de usuario en una prueba o especificación de integración de rieles?


Estaba haciendo esto antes en una aplicación Rails 2 en una ActionController::IntegrationTest con

get '/', {}, {:user_agent => "Googlebot"}

pero parece que ya no funciona en Rails 3.

¿Que debería hacer?


36
2017-12-08 03:44


origen


Respuestas:


Si usa request.user_agent en su aplicación, puede escribir el siguiente código:

get '/', {}, { "HTTP_USER_AGENT" => "Googlebot" }

43
2018-01-06 09:45



Ninguna de las respuestas anteriores funcionó para mí, lo siguiente es lo que finalmente funcionó en una prueba de controlador rspec:

@request.user_agent = "a MobileDevice/User-Agent"
post :endpoint, param: 2354

15
2018-05-30 22:04



Arreglé este comportamiento y con Rails 4.0 podrá especificar encabezados HTTP reales como "User-Agent" y "Content-Type" en las pruebas de integración y funcionales. Ya no es necesario especificarlos como variables CGI.

Si está interesado, puede ver el cambio: https://github.com/rails/rails/pull/9700


7
2018-03-15 15:52



Si tiene una colección de especificaciones que requieren un agente de usuario específico, es posible que lo siguiente le ayude a SECAR sus especificaciones:

Defina esto en alguna parte (p. 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

Entonces solo include DefaultUserAgent Cuándo lo necesitas.


3
2017-09-28 19:32



Para mí, en una prueba de controlador en rspec3, utilicé

request.env["HTTP_USER_AGENT"] = "Hello"

Antes de hacer la solicitud


3
2018-05-12 08:53



Un agente de usuario es solo un encabezado http, por lo que debería poder usar los métodos aquí: http://guides.rubyonrails.org/testing.html#helpers-available-for-integration-tests

Y pase el agente de usuario a los encabezados (no lo he probado):

headers = {"User-Agent" => "Googlebot"}
request_via_redirect(:get, '/', {}, headers)

-1
2017-12-08 04:06