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é
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