Boire ou coder ... Pourquoi choisir?
Publié le 14 janvier 2009 23:00

Rails : tester notre code précédent

Hier, nous avons vu comment, avec Rails et JQuery, afficher en live sur une page d'inscription si un pseudonyme est déjà utilisé ou non. Aujourd'hui, comme nous cherchons à avoir du code qui fonctionne, nous allons voir comment tester celui-ci.

Tout d'abord, sachez que dans l'idée, il ne faudrait pas faire les tests que nous allons faire maintenant, mais pendant. Si vous commencez à faire des tests alors que vous avez déjà bien démarré votre application, vous allez rapidement vous retrouver à passer un temps fou à écrire les tests du code déjà réalisé. Mieux vaut faire juste ce qu'il faut de tests à chaque fois que vous écrivez un peu de code.

Nous allons donc, ici, tester toutes les éventualités possibles lors de l'appel à la méthode "nick_available". Ce n'est pas bien compliqué puisqu'il n'y en a que deux :

  • Le pseudonyme est utilisé
  • Le pseudonyme n'est pas utilisé
Tout d'abord, nous allons créer une fixture d'utilisateur de test. Je ne détaillerais pas cela, ce n'est pas l'objet de l'article. Vous pouvez cependant vous documenter.

Nous nommons notre utilisateur "aaron".

Puis testons son existence. Dans le test fonctionnel de notre contrôleur "users", nous ajoutons donc le test suivant : def test_nick_available get :nick_available, {:id => 'aaron'} assert @response.body == 'NOT' end

Et nous testons la non existence def test_nick_not_available get :nick_available, {:id => 'moimeme'} assert @response.body == 'OK' end

Que se passe-t-il lorsque nous exécutons notre test (rake test) ? La première méthode fait un appel à notre page en utilisant la méthode get et en passant comme paramètre le pseudonyme aaron. Vu que cet utilisateur existe dans la base, la page va donc afficher 'NOT'.

Le contenu de @response.body sera donc 'NOT', le contenu de notre page.

Pareil avec la seconde méthode, mais à l'inverse. Le contenu sera 'OK' puisque l'utilisateur n'existe pas.

Maintenant, voyons la méthode assert. Celle-ci lèvera une erreur si le résultat passé n'est pas true.

En conséquent, dans notre premier test, si le contenu de la page n'est pas 'NOT', notre test échouera. Et inversement dans le second.

Si par la suite, pour une raison x ou y, votre code ne fonctionne plus, vous vous en rendrez alors très rapidement compte puisque votre test échouera. :)

Commentaires

Postez un commentaire

Markdown activé