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?
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?
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
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.
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 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.