web-dev-qa-db-fra.com

Outils de test unitaire JavaScript pour TDD

J'ai examiné et examiné de nombreux tests unitaires et outils de test JavaScript, mais je n'ai pas trouvé d'option appropriée pour rester totalement conforme à la norme TDD. Alors, existe-t-il un outil de test unitaire JavaScript entièrement compatible TDD?

717
Mark Levison

Karma ou rapporteur

Karma est un coureur de test JavaScript construit avec Node.js et destiné aux tests unitaires.

Le rapporteur est destiné aux tests de bout en bout et utilise le pilote Web Selenium pour conduire les tests.

Les deux ont été réalisés par l'équipe Angular. Vous pouvez utiliser n'importe quelle bibliothèque d'assertion de votre choix.

Screencast: Mise en route de Karma

lié :

pros :

  • Utilise node.js, donc compatible avec Win/OS X/Linux
  • Exécutez des tests depuis un navigateur ou sans tête avec PhantomJS
  • Exécuter sur plusieurs clients à la fois
  • Option pour lancer, capturer et éteindre automatiquement les navigateurs
  • Possibilité d'exécuter serveur/clients sur un ordinateur de développement ou séparément
  • Exécuter des tests à partir d'une ligne de commande (peut être intégré à ant/maven)
  • Écrire des tests de style xUnit ou BDD
  • Prend en charge plusieurs frameworks de test JavaScript
  • Exécution automatique des tests lors de la sauvegarde
  • Requêtes proxy inter-domaines
  • Possibilité de personnaliser:
    • Étendez-le pour envelopper d'autres frameworks de test (Jasmine, Mocha, QUnit intégré)
    • Vos propres affirmations/réfutations
    • Reporters
    • Lanceurs de navigateur
  • Plugin pour WebStorm
  • Pris en charge par l'EDI Netbeans

Inconvénients :

mocha.js

Je ne suis absolument pas qualifié pour commenter les caractéristiques, les forces et les faiblesses de mocha.js, mais cela vient de m'être recommandé par quelqu'un en qui j'ai confiance dans la communauté JS.

Liste des fonctionnalités, comme indiqué par son site web:

  • support du navigateur
  • support async simple, y compris les promesses
  • rapport de couverture de test
  • soutien diff chaîne
  • aPI javascript # pour l'exécution de tests
  • statut de sortie approprié pour le support CI, etc.
  • détecte et désactive automatiquement la coloration pour les non-ttys
  • mappe les exceptions non capturées au bon cas de test
  • prise en charge du délai d'expiration du test asynchrone
  • délais d'attente spécifiques au test
  • support de notification de Growl
  • rapporte les durées de test
  • met en évidence les tests lents
  • support de l'observateur de fichiers
  • détection de fuite variable globale
  • éventuellement exécuter des tests qui correspondent à une expression rationnelle
  • auto-exit pour éviter le "blocage" avec une boucle active
  • méta-générer facilement des suites et des cas de test
  • support de fichier mocha.opts
  • titres de suite cliquables pour filtrer l'exécution des tests
  • support du débogueur de noeud
  • détecte plusieurs appels à done ()
  • utiliser n'importe quelle bibliothèque d'assertion que vous voulez
  • reporting extensible, livré avec plus de 9 reporters
  • dSL de test extensibles ou "interfaces"
  • avant, après, avant, après, après chaque crochet
  • support de transpiler arbitraire (coffee-script, etc.)
  • Bundle TextMate

yolpo

yolpo

Cela n'existe plus, redirige vers sequential.js à la place

Yolpo est un outil permettant de visualiser l'exécution de javascript. Les développeurs d'API Javascript sont invités à rédiger leurs cas d'utilisation pour montrer et informer leur API. Ces cas d'utilisation constituent la base des tests de régression.

AVA

AVA logo

Coureur de test futuriste avec prise en charge intégrée de ES2015. Même si JavaScript est mono-thread, IO dans Node.js peut se produire en parallèle en raison de sa nature asynchrone. AVA en profite et exécute vos tests simultanément, ce qui est particulièrement bénéfique pour les tests IO lourds. De plus, les fichiers de test sont exécutés en parallèle en tant que processus distincts, vous offrant ainsi de meilleures performances et un environnement isolé pour chaque fichier de test.

  • Minimal et rapide
  • Syntaxe de test simple
  • Exécute les tests simultanément
  • Applique l'écriture de tests atomiques
  • Pas de globales implicites
  • Environnement isolé pour chaque fichier de test
  • Ecrivez vos tests en ES2015
  • Soutien de promesse
  • Prise en charge de la fonction générateur
  • Support de fonction asynchrone
  • Support observable
  • Assertions améliorées
  • TAP optionnel
  • Nettoyer les traces de la pile

Buster.js

Un coureur de test JavaScript construit avec Node.js. Très modulaire et flexible. Il est livré avec sa propre bibliothèque d'assertion, mais vous pouvez ajouter la vôtre si vous le souhaitez. La bibliothèque d'assertions est découplée, vous pouvez donc également l'utiliser avec d'autres coureurs de test. Au lieu d'utiliser assert(!...) ou expect(...).not..., il utilise refute(...), qui est un imho de Nice twist.

Une boîte à outils de test JavaScript du navigateur. Il effectue des tests de navigateur avec l’automatisation du navigateur (pensez à JsTestDriver), des tests de page HTML statique de style QUnit, des tests dans des navigateurs sans interface utilisateur (PhantomJS, jsdom, ...), et plus encore. Jetez un oeil à la vue d'ensemble !

Un toolkit de test Node.js. Vous disposez des mêmes bibliothèques de cas de tests, d'assertions, etc., ce qui est également idéal pour les navigateurs hybrides et le code Node.js. Rédigez votre scénario de test avec Buster.JS et exécutez-le à la fois dans Node.js et dans un navigateur réel.

Screencast: Buster.js Mise en route (2:45)

pros :

  • Utilise node.js, donc compatible avec Win/OS X/Linux
  • Exécuter des tests depuis un navigateur ou sans tête avec PhantomJS (bientôt)
  • Exécuter sur plusieurs clients à la fois
  • Prend en charge les tests NodeJS
  • Pas besoin d'exécuter serveur/clients sur un ordinateur de développement (pas besoin d'Internet Explorer)
  • Exécuter des tests à partir d'une ligne de commande (peut être intégré à ant/maven)
  • Écrire des tests de style xUnit ou BDD
  • Prend en charge plusieurs frameworks de test JavaScript
  • Reporter les tests au lieu de les commenter
  • SinonJS intégré
  • Tests automatiques lors de la sauvegarde
  • Requêtes proxy inter-domaines
  • Possibilité de personnaliser:
    • Étendez-le pour envelopper d'autres frameworks de test (JsTestDriver intégré)
    • Vos propres affirmations/réfutations
    • Reporters (XML xUnit, points traditionnels, spécification, tap, TeamCity et plus intégré)
    • Personnaliser/remplacer le code HTML utilisé pour exécuter les tests du navigateur
  • Intégration TextMate et Emacs

Inconvénients :

  • Stil en version bêta donc peut être buggy
  • Pas de plugin pour Eclipse/IntelliJ (pour le moment)
  • Ne regroupe pas les résultats par os/navigateur/version comme TestSwarm *. Cependant, il affiche le nom du navigateur et la version dans les résultats du test.
  • Aucun historique de résultats de tests précédents comme TestSwarm *
  • Ne fonctionne pas complètement sur les fenêtres à partir de mai 2014

* TestSwarm est également un serveur d'intégration continue, tandis que vous avez besoin d'un serveur CI distinct pour Buster.js. Cependant, il génère des rapports XML xUnit, il devrait donc être facile à intégrer avec Hudson , Bamboo ou d’autres serveurs CI.

TestSwarm

https://github.com/jquery/testswarm

TestSwarm n'est officiellement plus en développement actif, comme indiqué sur leur page Web GitHub. Ils recommandent Karma, browserstack-runner ou intern.

Jasmin

Jasmine

Ceci est un framework basé sur le comportement (comme indiqué dans la citation ci-dessous) qui pourrait intéresser les développeurs familiarisés avec Ruby ou Ruby sur Rails. La syntaxe est basée sur RSpec utilisés pour les tests dans les projets Rails.

Les spécifications Jasmine peuvent être exécutées à partir d'une page HTML (à la manière de qUnit) ou à partir d'un programme d'exécution de tests (comme Karma).

Jasmine est un framework de développement basé sur le comportement permettant de tester votre code JavaScript. Cela ne dépend d'aucun autre framework JavaScript. Il ne nécessite pas de DOM.

Si vous avez de l'expérience avec ce framework de test, merci de contribuer avec plus d'informations :)

Projet home: http://jasmine.github.io/

QUnit

QUnit se concentre sur le test de JavaScript dans le navigateur tout en offrant le plus de confort possible au développeur. Blurb du site:

QUnit est une suite de tests unitaires JavaScript puissante et facile à utiliser. Il est utilisé par les projets jQuery, jQuery UI et jQuery Mobile et est capable de tester tout code JavaScript générique.

QUnit partage une certaine histoire avec TestSwarm (ci-dessus):

QUnit a été développé à l'origine par John Resig dans le cadre de jQuery. En 2008, il disposait de sa propre maison, de son nom et de sa documentation sur l'API, permettant à d'autres utilisateurs de l'utiliser également pour leurs tests unitaires. À l'époque, cela dépendait encore de jQuery. Une réécriture en 2009 a corrigé le fait que, maintenant, QUnit est complètement autonome. Les méthodes d'assertion de QUnit suivent la spécification CommonJS Unit Testing, qui a été influencée dans une certaine mesure par QUnit.

Projet home: http://qunitjs.com/

Sinon

Un autre excellent outil est sinon.js de Christian Johansen, auteur de Développement JavaScript piloté par les tests . Le mieux décrit par lui-même:

Autonome teste des espions, des moignons et des simulacres pour JavaScript. Aucune dépendance ne fonctionne avec aucun framework de tests unitaires.

stagiaire

Le site Web interne fournit une comparaison directe des fonctionnalités aux autres cadres de test de cette liste. Il offre plus de fonctionnalités prêtes à l'emploi que tout autre système de test basé sur JavaScript.

JEST

Un nouveau cadre de test, mais pourtant très puissant. Il permet également les tests basés sur des instantanés, ce qui augmente la vitesse des tests et crée une nouvelle dynamique en termes de tests.

Découvrez l'une de leurs discussions: https://www.youtube.com/watch?v=cAKYQpTC7MA

Encore mieux: Mise en route

1498
gregers

Jetez un oeil à le framework de test unitaire Dojo Object Harness (DOH) , qui est à peu près un harnais indépendant du framework pour les tests unitaires JavaScript et qui n'a aucune dépendance Dojo. Il en existe une très bonne description à Test des applications Web 2.0 avec le faisceau d’objectifs Dojo .

Si vous souhaitez automatiser les tests d'interface utilisateur (un point sensible de nombreux développeurs), vérifiez doh.robot (arrêt temporaire. Update: autre lien http://dojotoolkit.org/reference-guide/util/dohrobot.html ) et dijit.robotx (temporairement en panne) . Ce dernier est conçu pour un test d'acceptation. Mise à jour:

Les articles référencés expliquent comment les utiliser, comment émuler un utilisateur interagissant avec votre interface utilisateur à l'aide de la souris et/ou du clavier, et comment enregistrer une session de test afin que vous puissiez la "jouer" plus tard automatiquement.

63
Eugene Lazutkin

Chutzpah - Un coureur de test JavaScript

J'ai créé un projet open source appelé Chutzpah, qui est un exécuteur de tests pour les tests unitaires JavaScript. Chutzpah vous permet d'exécuter des tests unitaires JavaScript à partir de la ligne de commande et de l'intérieur de Visual Studio. Il prend également en charge l'exécution sur le serveur d'intégration continue TeamCity.

34
Matthew Manela

La section JavaScript de l'entrée Wikipedia, Liste des cadres de test d'unité , fournit une liste des choix disponibles. Il indique s'ils travaillent côté client, côté serveur ou les deux.

26
Pete TerMaat

BusterJS

Il y a aussi BusterJS de Christian Johansen, l'auteur de Test Driven Javascript Development et du framework Sinon. Du site:

Buster.JS est un nouveau framework de test JavaScript. Il teste les navigateurs en automatisant les tests dans les navigateurs réels (pensez à JsTestDriver), ainsi que dans les tests Node.js.

14
Tauren

google-js-test:

Cadre de test JavaScript publié par Google: https://github.com/google/gjstest

  • Temps de démarrage et d'exécution des tests extrêmement rapide, sans avoir à exécuter de navigateur.
  • Sortie nette et lisible en cas de réussite ou d'échec des tests.
  • Un testeur basé sur un navigateur qui peut être simplement actualisé chaque fois que JS est modifié.
  • Style et sémantique semblables à Google Test pour C++.
  • Un framework moqueur intégré qui nécessite un code passe-partout minimal (par exemple, aucun $tearDown ou $verifyAll) avec un style et une sémantique basés sur le Google C++ Mocking Framework .

Il n'y a actuellement aucun fichier binaire pour Windows

10
kolen

Nous utilisons maintenant Qunit avec Pavlov et JSTestDriver tous ensemble. Cette approche fonctionne bien pour nous.

QUnit

Pavlov , source

jsTestDriver , source

8
Tom Stickel

Vous avez "fonctionne sur le navigateur actuel" en tant que professionnel, mais d'après mon expérience, c'est un inconvénient, car il est lent. Mais ce qui le rend précieux, c’est le manque d’émulation suffisante de JS par rapport aux alternatives sans navigateur. Si votre système JS est suffisamment complexe, il se peut que seul un test dans le navigateur suffise, mais il existe plusieurs options supplémentaires à prendre en compte:

HtmlUnit : "Il supporte assez bien JavaScript (qui s'améliore constamment) et est capable de fonctionner même avec des bibliothèques relativement complexes AJAX, simulant soit Firefox, soit Internet Explorer, en fonction de la configuration. vous voulez utiliser. " Si son émulation est suffisante pour votre utilisation, il sera beaucoup plus rapide que de conduire un navigateur.

Mais peut-être que HtmlUnit a assez de support JS mais vous n’aimez pas Java? Alors peut-être:

Celerity : API Watir s'exécutant sur JRuby soutenu par HtmlUnit.

ou similaire

Schnell : un autre wrapper JRuby de HtmlUnit.

Bien sûr, si HtmlUnit n'est pas assez bon et que vous devez piloter un navigateur, alors vous pourriez envisager Watir pour piloter votre JS .

6
Jeffrey Fredrick

YUI a aussi un framework de test . Cette vidéo de Yahoo! Le théâtre est une bonne introduction, bien qu'il y ait beaucoup de notions de base sur le TDD au début.

Ce cadre est générique et peut être exécuté sur n’importe quelle bibliothèque JavaScript ou JS.

6
Matthew Taylor

Nous avons ajouté l'intégration JUnit à notre Java au générateur de code Javascript ST-JS ( http://st-js.org ). Le framework génère sur Javascript correspondant à la fois le code testé et les tests unitaires et envoie le code à différents navigateurs.

Il n’est pas nécessaire d’avoir un serveur séparé car le lanceur de tests unitaires ouvre le port http requis (et le ferme une fois les tests terminés). La structure manipule la pile Java de sorte que les assertions ayant échoué soient correctement affichées par le plug-in JUnit Eclipse. Voici un exemple simple avec jQuery et Mockjax:

@RunWith(STJSTestDriverRunner.class)
@HTMLFixture("<div id='fortune'></div>")

@Scripts({ "classpath://jquery.js",
       "classpath://jquery.mockjax.js", "classpath://json2.js" })
public class MockjaxExampleTest {
  @Test
  public void myTest() {
    $.ajaxSetup($map("async", false));
    $.mockjax(new MockjaxOptions() {
      {
        url = "/restful/fortune";
        responseText = new Fortune() {
          {
            status = "success";
            fortune = "Are you a turtle?";
          }
        };
      }
    });

    $.getJSON("/restful/fortune", null, new Callback3<Fortune, String, JQueryXHR>() {
      @Override
      public void $invoke(Fortune response, String p2, JQueryXHR p3) {
        if (response.status.equals("success")) {
          $("#fortune").html("Your fortune is: " + response.fortune);
        } else {
          $("#fortune").html("Things do not look good, no fortune was told");
        }

      }
    });
    assertEquals("Your fortune is: Are you a turtle?", $("#fortune").html());
  }

  private static class Fortune {
    public String status;
    public String fortune;
  }
}
3
alex.c

Vous pourriez également être intéressé par le framework de tests unitaires qui fait partie de qooxdoo , un framework RIA open source similaire à Dojo, ExtJS, etc., mais avec une chaîne d’outils assez complète.

Essayez la version en ligne de testrunner . Astuce: cliquez sur la flèche grise en haut à gauche (cela devrait être plus évident). C'est un bouton "play" qui exécute les tests sélectionnés.

Pour en savoir plus sur les classes JS qui vous permettent de définir vos tests unitaires, voir la version en ligne API Viewer .

Pour les tests d’interface utilisateur automatisés (basés sur Selenium RC), consultez le projet Simulator .

3
Andreas Ecker

Vous devriez jeter un oeil à env.js . Voir mon blog pour un exemple expliquant comment écrire des tests unitaires avec env.js.

3
Aaron Digulla

MochiKit possède un framework de test appelé SimpleTest qui semble avoir fait son chemin. Voici un article de blog de l'auteur original .

2
Fredrik