Quels sont les cadres de tests unitaires et de moqueries JavaScript que vous avez utilisés? [fermé]

StackOverflow https://stackoverflow.com/questions/209418

Question

Mon cadre JavaScript principal est jQuery . J'aimerais donc que mes cadres de test unitaire et de moquage soient compatibles avec cela. Je préférerais ne pas avoir à introduire un autre framework JavaScript.

J'utilise actuellement QUnit pour les tests unitaires et Jack pour me moquer, mais je suis assez nouveau pour l’ensemble des tests unitaires de JavaScript.

Quelqu'un d'autre a-t-il un meilleur outil à suggérer? Qu'est-ce qui a fonctionné pour vous?

Était-ce utile?

La solution

QUnit
jQUnit
Écrire des tests JS avec QUnit et jQUnit

QUnit est le framework de tests unitaires du framework JavaScript jQuery. Le framework de test lui-même utilise la bibliothèque jQuery, mais les tests peuvent être écrits pour n'importe quel JavaScript et ne nécessitent pas que le code utilise jQuery. JQUnit est une version modifiée de QUnit qui ajoute à la configuration, au démontage et à l'assertion des fonctions plus typiques d'un framework xUnit, et encapsule tout dans une seule variable globale.

L’interface visuelle de la page testrunner est agréable, vous permettant d’avancer dans le détail et de voir chaque assertion dans chaque méthode de test. L'écriture de tests est assez facile et vous pouvez exécuter le code de test directement sur la page testRunner [8]. Cela permet des tests DOM faciles et visibles.

QUnit: MIT ou GPL (choisissez) jQUnit: Licence MIT

Avantages
  - Support asynchrone
  - Bon pour les tests DOM
  - Les tests s'exécutent toujours de manière séquentielle dans l'ordre dans lequel ils ont été ajoutés à une suite.
  - Débogage sur la page de test à l'aide de firebug
  - La syntaxe est similaire à JUnit si vous utilisez JQUnit, mais simple à apprendre si vous utilisez QUnit
Inconvénients
  - L’automatisation serait difficile à mettre en œuvre

Autres conseils

Je pense que Jack est le meilleur framework moqueur pour JavaScript au moment de la rédaction de cet article. La raison principale est que ce qui est correct pour JavaScript n’est probablement pas celui qui convient à un langage fortement typé tel que Java.

De nombreux frameworks de mappage JavaScript sont inspirés des frameworks mock Java (tels que l'excellent JsMockito, par exemple). Mais le problème, c’est qu’ils nécessitent une injection de dépendance, car c’est à peu près le seul moyen raisonnable d’utiliser la moquerie en Java. Mais en JavaScript, il existe de nombreuses manières d'utiliser les moqueries et vous n'êtes pas obligé à utiliser l'injection de dépendance partout.

Par exemple, avec JsMockito, vous devez créer des simulacres puis les transférer dans votre logiciel à tester (SUT). Le SUT doit appeler directement les simulacres. Par conséquent, vous devez coder le SUT en tant que constructeur ou fonction prenant toutes ses dépendances en tant que paramètres. (Parfois, c'est une bonne façon de le mettre en œuvre, mais pas dans tous les cas. La queue remue le chien si la conception de votre cadre moqueur force votre approche de mise en œuvre).

En JavaScript, il est très facile d'effectuer un "détournement". toute fonction. Par conséquent, il existe une multitude de façons de créer quelque chose qui vous permet de vous moquer de certains de ses éléments sans y injecter explicitement ses dépendances. Par exemple, Jack vous permet de simuler n'importe quelle fonction, qu'elle soit publique ou sur un objet local. À partir de là, vous pouvez l’espionner, le remplacer ou exprimer vos attentes. Le point clé est le suivant: une fois que vous avez moqué une fonction, TOUS les appels de cette fonction d'origine seront dirigés vers votre maquette . En d'autres termes, vos simulacres continueront à être utilisés même si la fonction d'origine non simulée a été appelée. En conséquence, vous n'êtes pas obligé d'injecter des dépendances, bien que vous puissiez certainement le faire dans les cas qui le nécessitent.

JavaScript est un langage différent de Java (et C #, etc.). Il permet des idiomes d'implémentation différents. L'injection de dépendances reste un outil précieux dans la boîte à outils en JavaScript, mais ce n'est plus le seul jeu en ville. Votre environnement moqueur doit savoir et respecter ce fait. Jack et quelques autres le font, mais parmi ceux-là, Jack semble être le plus mature et le plus riche en fonctionnalités.

Je ne sais pas pourquoi personne n'a mentionné JsTestDriver ! Il doit s'agir de l'un des seuls outils de test JS qui fonctionne comme vous le souhaiteriez si vous avez utilisé des outils de test unitaire dans d'autres langues.

Vous pouvez exécuter des tests sans toucher un navigateur, vous pouvez l’intégrer à des environnements IDE, vous pouvez l’intégrer à des systèmes d’intégration continue ... Oh, c’est rapide, et vous pouvez exécuter des tests dans plusieurs navigateurs simultanément.

Vous pouvez également utiliser d'autres frameworks de test, comme YUITest, pour le rendre encore meilleur.

Test YUI
TDD avec test YUI

YUI Test est la structure de test de la bibliothèque d’interface utilisateur de Yahoo. Il est utilisé par Yahoo pour tester sa propre bibliothèque et sa syntaxe est similaire à celle de jUnit.

Comme jsUnit, YUI Test est livré avec sa propre console de journalisation qui peut générer des informations, des avertissements et des erreurs en plus des résultats de chaque test.

YUI offre également la possibilité de envoyer des rapports sur les résultats format JSON ou XML.

Le test YUI est sous licence BSD.

Avantages
  - Une très bonne documentation
  - Communauté active
  - Communiqués réguliers
  - La syntaxe est similaire à jUnit (suites de tests, assertions et configuration / démontage)
  - Support asynchrone
  - Bon pour les tests DOM
  - Les tests s'exécutent toujours de manière séquentielle dans l'ordre dans lequel ils ont été ajoutés à une suite

Inconvénients
  - Automatisation pas facile à mettre en œuvre, mais moins difficile que d’autres frameworks

Découvrez également http://sinonjs.org/

  

Test des espions Taches de test Modes Faux minuteurs Faux XHR Faux Serveurs Sandboxing

Cela fonctionne avec qUnit et cela a été un avantage jusqu'à présent.

Ceci est une très bonne critique des frameworks moqueurs disponibles pour Javascript:

http://testdrivenwebsites.com/2010/05/ 06 / java-script-mock-frameworks-Comparison

Nous utilisons jsspec jsspec . C'est très bien si vous aimez rspec et BDD. Je viens de voir un article de Justin Gehtland sur son utilisation " sans tête " aussi bien.

Pour vous moquer de JavaScript, consultez qMock , un framework écrit par un collègue et moi-même. pour compléter notre utilisation de QUnit. Bien que ce dernier soit idéal pour les tests unitaires, il ne permet pas de tests très efficaces de la logique asynchrone / métier. Nous n’avons étiqueté aucune version stable, mais il y a de bonnes documentations dessus, et si vous passez à la caisse, vous verrez que qmock lui-même a derrière lui des tests unitaires assez explicites.

Oh, et pour automatiser les tests dans le cadre de la construction, nous avons utilisé un simple script de sélénium pour naviguer dans notre suite de tests (une page de test par fichier JS) et avons "écouté" une classe CSS réussie ou échouée (ajoutée par QUnit). . Cela fonctionne aussi sans tête pour IE / FF2 autant que je sache.

Pour le développement de Mozilla, je suis tombé amoureux de UXU , basé sur MozUnit mais toujours actif. Possède des fonctionnalités intéressantes comme les méthodes de serveur factice ou de veille / veille.

J'utilise le framework de test Screw Unit et j'ai écrit ma propre bibliothèque appelée jsMocha qui est très utilisé dans l'entreprise où je travaille depuis plus de 6 mois.

Je sais que vous demandez des frameworks compatibles JQuery, mais je souhaite lancer script.aculo.us dans le mélange pour la complétude. Ils disposent d'une test unitaire qui n'est pas si mal.

CrossCheck semblait extrêmement puissant lorsque je l'ai regardé, mais nous ne l'avons pas intégré à notre processus de construction pour le moment. Il présente l’avantage de ne pas utiliser de navigateur et devrait donc bien fonctionner dans un scénario de compilation et de test automatisé.

http://thefrontside.net/crosscheck

Vous pouvez essayer HtmlUnit qui a un Version compatible JQuery depuis plus d'un an.

L’avantage de HtmlUnit est qu’il ne pilote pas de navigateur, il est donc rapide.

L’inconvénient est qu’il ne pilote pas de navigateur et que certains éléments de JS ne fonctionnent pas. Cependant, ils peuvent exécuter les tests JQuery pour que le support JS soit suffisant pour ce dont vous avez besoin.

JsUnit est exécuté à partir du navigateur, via son plug-in Eclipse ou automatiquement via un ANT tâche. Vous créez une page HTML avec un ensemble de fonctions de test, qui doivent être nommées avec le préfixe & # 8216; test & # 8217 ;, notamment le fichier JS que vous testez. Lorsqu'une assertion dans une fonction échoue, toute la fonction échoue et cesse de s'exécuter. Il n'y a pas d'ordre garanti dans lequel ces tests sont exécutés. Vous pouvez créer des fonctions setup () et teardown () .

Licence: GPL, GLPL, MPL

Avantages

  • L’automatisation est relativement facile à implémenter
  • Beaucoup de fonctionnalités
  • La syntaxe est similaire à JUnit

Inconvénients

  • Pas terrible pour les tests DOM car il exécute des tests dans un iFrame.
  • Aucune garantie que les tests seront exécutés dans l'ordre dans lequel ils ont été écrits.
  • Impossible d'utiliser Firebug sur la page testrunner. Besoin d'un autre onglet ouvert avec le code de test réel.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top