49 votes

Est-il possible de spécifier un agent utilisateur dans un test ou une spécification d'intégration de rails?

Je faisais cela auparavant dans une application rails 2 dans un ActionController::IntegrationTest avec

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

mais cela semble ne plus fonctionner dans Rails 3.

Que devrais-je faire?

51voto

Noé Points 304

Si vous utilisez request.user_agent dans votre application, vous pouvez écrire le code suivant:

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

15voto

Alex Pretzlav Points 2475

Aucune des réponses ci-dessus n'a fonctionné pour moi, ce qui a finalement fonctionné dans un test de contrôleur rspec:

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

7voto

Yves Senn Points 1438

J'ai corrigé ce problème et avec Rails 4.0, vous pourrez spécifier des en-têtes HTTP réels comme "User-Agent" et "Content-Type" dans les tests d'intégration et fonctionnels. Il n'est plus nécessaire de les spécifier en tant que variables CGI.

Si vous êtes intéressé, vous pouvez consulter le changement: https://github.com/rails/rails/pull/9700

3voto

dukedave Points 3496

Si vous avez un ensemble de spécifications qui nécessitent toutes un agent utilisateur spécifique, vous pouvez trouver les aides suivantes pour sécher vos spécifications:

Définissez cela quelque part (par exemple 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
 

Alors seulement include DefaultUserAgent quand vous en avez besoin.

0voto

zsalzbank Points 5698

Un agent utilisateur n'est qu'un en-tête http, vous devriez donc pouvoir utiliser les méthodes ici: http://guides.rubyonrails.org/testing.html#helpers-available-for-integration-tests

Et passez l'agent utilisateur aux en-têtes (je n'ai pas testé cela):

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X