Au travail, nous venons de commencer sur une application fortement basée sur Javascript (utilisant en fait Coffeescript, mais toujours), dont j'ai implémenté un système de test automatisé utilisant JsTestDriver et fabric.
Nous n'avons jamais écrit quelque chose avec autant de Javascript, donc jusqu'à présent nous n'avons jamais fait de test Javascript. Je ne sais pas exactement ce que nous devrions tester dans nos tests unitaires. Nous avons écrit des plugins JQuery pour diverses choses, il est donc évident qu'ils doivent être vérifiés autant que possible avec JsTestDriver, mais tout le monde dans mon équipe semble penser que nous devrions également tester le Javascript au niveau de la page.
Je ne pense pas que nous devrions tester Javascript au niveau de la page en tant que tests unitaires, mais plutôt utiliser un système comme Selenium pour vérifier que tout fonctionne comme prévu. Mon raisonnement principal est que pour le moment, les tests Javascript au niveau de la page sont garantis comme échouant via JsTestDriver, car ils essaient d'accéder à des éléments sur le DOM qui ne peuvent pas exister.
Alors, qu'est-ce qui devrait être testé en Javascript?
la source
Réponses:
Testez tout ce que vous pouvez.
La logique pure peut être testée facilement.
Si votre code interagit avec le DOM ou le réseau, c'est beaucoup plus difficile.
Si vous pouvez extraire un morceau de code pour travailler sur un élément DOM arbitraire au lieu d'un élément spécifique, alors vous pouvez le tester plus facilement. (Faire fonctionner l'élément sur un paramètre).
Le code qui utilise Ajax peut être testé en appelant simplement la fonction de rappel avec des données fixes. J'ai eu quelques tests où j'ai écrasé
$.ajax
avec ma propre fonction. Assurez-vous simplement de remettre le vrai lorsque vous avez terminé!Ce que vous constaterez, c'est que «javascript au niveau de la page» signifie vraiment «code étroitement couplé» et si vous découplez les parties du code, vous pouvez les tester indépendamment.
(Le sélénium n'est pas un outil de test unitaire. Il est idéal pour les scénarios de haut niveau, mais vous ne pouvez pas le tester avec lui, et il ne fonctionne pas dans un environnement isolé.)
la source
$(document).ready(...)
....
dépend de sa taille . :-) Je pense que vous devriez pouvoir obtenir cela à une seule fonction nommée qui est également testée. Ensuite, votre code non testé est une seule ligne. (Maintenant, c'est un objectif, pas une donnée. Dans la pratique, j'ai toujours eu plus d'une ligne de code non testé.)Algorithmes de test. Les parties étroitement liées à l'interface graphique dépendent plus d'un navigateur spécifique, elles doivent donc être testées à l'aide d'utilitaires de type sélénium.
Votre code, bien sûr, doit contenir des algorithmes en tant que morceaux de code isolés, sinon, les tests unitaires sont presque impossibles.
Les plugins jquery, btw, ne sont pas faciles à tester.
la source
J'avais l'habitude de travailler avec Java et d'après ce que je vois, les tests unitaires Java sont plus faciles que les tests unitaires JavaScript car Java est plus rigide.
Je suis convaincu que le développement piloté par les tests est la meilleure chose, donc j'explore également comment tester unitaire JavaScript. En Java, j'ai simulé le code qui établissait la connexion à la base de données, les objets d'accès aux données, et je le compare au code en JavaScript qui modifie le DOM et au code qui fait des appels AJAX au serveur.
Ce que je veux dire, c'est qu'il me semble que ce qui devrait être testé est la logique de manière explicite. Par exemple, vous ne voulez pas passer un appel AJAX lorsque vous exécutez des tests unitaires parce que (a) vous avez besoin du serveur pour fonctionner et (b) il est lent et l'une des directives des tests unitaires est qu'il doit être super rapide pour que les développeurs n'évitent pas de les exécuter comme chaque minute.
Une autre directive consiste pour le processus d'intégration continue à envoyer un e-mail disant qu'il a trouvé un test unitaire qui a échoué.
la source