Question

Comment puis-je envoyer un cookie dans un test fonctionnel? Comment puis-je tester pour être sûr que le cookie est effacé?

J'ai eu beaucoup de succès en utilisant TDD pour construire les modèles pour une application Rails, mais ont frappé un accroc à l'égard de contrôleur test: je peux définir des valeurs de cookie une fois dans un test et de les lire, mais je ne peux pas clair leur. C'est:

test "clears cookie" do
  get :set_it, :stuff => {'key' => 'value'} # stuff to cookify
  assert cookies['key'] == 'value' # works fine

  get :clear_it # cookie doesn't get sent. How do I simulate this?
  assert nil == cookies['key'], 'Cookie not cleared' # fails
end

Le guide d'essai des rails ne mentionne pas comment simuler l'envoi d'un cookie dans un test, juste comment vérifier que les données ont été définies sur le serveur. Je sais que j'ai couru dans une situation où les données avant cookies ne sont pas modifié sur le serveur jusqu'à ce que la réponse est envoyée. Est-ce que ce qui se passe ici? Je sorta espéré que les tests fonctionnels auraient fait un meilleur travail de « être le client ».

Est-ce un problème largement connu? Les gens sont tout simplement se résigner à utiliser JUnit pour ce genre de chose? J'aimerais vraiment être en mesure d'utiliser un cadre pour tous ou presque tous de mon TDD.


pur désespoir et devinettes m'a amené à essayer avec optimisme @ Response.Cookies, mais cela ne fonctionne pas non plus.

Était-ce utile?

La solution

Si vous voulez avoir un test unitaire spécifiquement autour de la MHS d'un cookie, alors vous êtes en train de tester si la réponse contient un en-tête qui définit le cookie à rien. Je suppose que votre get :clear_it fait cookies.delete :cookie-name . Ceci définit response.header pour contenir Set-[COOKIE-NAME]=;. Donc, si d'autres méthodes ne parviennent pas, vous pouvez simplement chercher cette chaîne directement.

Ce qui semble louche dans votre code est que vous vérifiez juste directement cookies. Où est la réponse aller de votre demande « get »?

Si tout le reste si à défaut, vous pouvez également utiliser des tests d'intégration avec Webrat comme discuté ici . Ce ne peut pas être aussi grande que les tests unitaires, mais ce sera au moins vérifier la fonctionnalité.

Autres conseils

Mon test de fermeture de session a

assert_nil @response.cookies["auth_token"]

qui fonctionne.

Quelle valeur êtes-vous sinon nul?

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