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 »].

Était-ce utile?

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

  1. "get" est le verbe correct http
  2. 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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top