Unité tester une méthode du contrôleur qui est appelé par une voie personnalisée
-
27-10-2019 - |
Question
Comment puis-je test unitaire une méthode du contrôleur qui est appelé par une voie personnalisée?
La route pertinente est la suivante:
/auth/:provider/callback(.:format) {:controller=>"sessions", :action=>"create"}
Sur la spécification du SessionsController
Je ne peux pas utiliser get :create
puisque cette voie n'existe pas. Si je l'utilise aussi get /auth/facebook/callback/
ça va me dire que No route matches {:controller=>"sessions", :action=>"/auth/facebook/callback"}
.
Il semble aussi que je ne peux pas simplement utiliser controller.create
depuis #create
accès des clés du hachage request
et il redirige également vers un autre chemin, même si je request.env ensemble dans le fichier spec [ « quelque chose »].
La solution
Un test fonctionnel doit tester la fonction de chaque action (Étant donné un ensemble de paramètres)
Fondamentalement, vous devez garder vos tests fonctionnels découplés de vos itinéraires. (Sinon quel est le point dans l'abstraction de routage de toute façon)
Dans le test :: unité un test fonctionnel ressemble à ceci
test "#{action_name} - does something" do
#{http_verb} :#{action_name}, :params => {:their => "values"}
assert_response :#{expected_response}
end
Note, nous ne mentionnons pas le routage partout.
Ainsi, un exemple réel pour votre création
test "create - creates a session" do
get :create, :provider => "your provider"
assert_response :success
end
Rails étouffer si elle ne peut pas correspondre à une route à cette demande.
Si cela ne fonctionne pas, je vous suggère de vérifier deux choses
- "get" est le verbe correct http
- il n'y a pas d'autres paramètres requis dans votre itinéraire (je peux voir: fournisseur est un)
Si je fais quoi que ce soit loufoque avec routage, J'ajoute normalement un test séparé.
test "create - routing" do
assert_recognizes({
:controller => "sessions",
:action => "create",
:provider => "yourProvider"
}, "/auth/yourProvider/callback")
end
Tant que cela correspond avec votre test d'action tout devrait être bien.