Outils de test de l'unité JavaScript pour DDT

j'ai examiné et considéré de nombreux tests D'unité JavaScript et des outils de test, mais n'ai pas été en mesure de trouver une option appropriée pour rester pleinement conforme à la DTT. Alors, y a-t-il un outil de test D'unité JavaScript entièrement conforme à la norme TDD?

717
demandé sur Mark Levison 2008-11-19 05:35:49

13 réponses

Karma ou Rapporteur

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

le rapporteur est destiné aux essais de bout en bout et utilise le pilote Web de sélénium pour conduire les essais.

tous les deux ont été fabriqués par L'équipe Angular. Vous pouvez utiliser n'importe quelle affirmation-bibliothèque que vous voulez avec.

Screencast: Karma Pour commencer

liées :

pros :

  • utilise un noeud.js, donc compatible avec Win / OS X / Linux
  • Exécuter des tests à partir du navigateur ou sans tête avec PhantomJS
  • Exécuter sur plusieurs clients à la fois
  • Option pour lancer, capturer et arrêter automatiquement les navigateurs
  • Option pour exécuter serveur / clients sur ordinateur de développement ou séparément
  • exécuter des tests à partir de la ligne de commande (peut être intégré dans ant/maven)
  • Écrire des tests xUnit ou BDD style
  • Supporte plusieurs cadres de test JavaScript
  • Auto-exécuter des tests sur " enregistrer
  • Procuries requests cross-domain
  • possibilité de personnaliser:
    • L'étendre pour envelopper d'autres cadres d'essai (Jasmine, Mocha, QUnit intégré)
    • vos propres assertions / réfutations
    • Reporters
    • "1519240920 Navigateur" Lanceurs
  • Plugin pour WebStorm
  • supporté par Netbeans IDE

Cons :

moka.js

Je ne suis pas du tout qualifié pour commenter mocha.js les caractéristiques, les forces et les faiblesses, mais il m'a été recommandé par quelqu'un en qui j'ai confiance dans la communauté JS.

liste des caractéristiques, tel que rapporté par son site web:

  • prise en charge du navigateur
  • simple asynchrone de soutien, y compris les promesses
  • de la couverture de test de la déclaration
  • chaîne de diff soutien
  • javascript # API pour l'exécution des tests
  • statut de sortie approprié pour le soutien de CI etc
  • auto-détecte et désactive la coloration de la non-ats
  • correspond aux exceptions non fondées au cas d'essai correct
  • async test de délai d'attente de soutien
  • temps d'arrêt spécifique à l'essai
  • soutien à la notification des grognements
  • indique la durée des essais
  • souligne lent tests
  • file watcher support
  • global leak variable leak detection
  • éventuellement d'exécuter des tests qui correspondent à une expression régulière
  • auto-sortie pour éviter les "accrocher" avec une boucle active
  • facilement méta-générer des suites et cas de test
  • moka.opte prise en charge des fichiers
  • cliquables suite les titres de filtre de test exécution
  • "1519240920 nœud" débogueur
  • détecte plusieurs appels à done ()
  • utilisez n'importe quelle bibliothèque d'assertion que vous voulez
  • extensible de reporting, qui est livré avec 9+ reporters
  • test extensible Dsl ou des "interfaces"
  • avant, après, avant, après chaque crochet
  • support de transpirateur arbitraire (café-script etc)
  • TextMate bundle

yolpo

yolpo

Cela n'existe plus, redirige vers séquentiel.js au lieu de

Yolpo est un outil pour visualiser l'exécution de javascript. Les développeurs d'API Javascript sont encouragés à écrire leurs cas d'utilisation pour afficher et informer leur api. Une telle utilisation les cas constituent la base des tests de régression.

AVA

AVA logo

Futuriste lanceur de test avec prise en charge intégrée pour ES2015. Même si JavaScript est simple-fileté, IO dans le noeud.js peuvent se produire en parallèle en raison de sa nature asynchrone. AVA en tire profit et exécute vos tests simultanément, ce qui est particulièrement bénéfique pour les tests IO lourds. Dans de plus, les fichiers de test sont gérés en parallèle comme des processus séparés, vous donnant encore de meilleures performances et un environnement isolé pour chaque fichier de test.

  • minime et rapide
  • Simple test de syntaxe
  • exécute les essais simultanément
  • impose l'écriture d'essais atomiques
  • pas de globals implicites
  • environnement isolé pour chaque fichier d'essai
  • écrivez vos tests en ES2015
  • Promesse de soutien
  • Générateur de fonction support
  • "1519240920 Async" fonction support
  • Observables support
  • "1519240920 Renforcée" affirme
  • utput
  • Nettoyer des traces de pile

Buster.js

A JavaScript coureur construit pour l'essai avec noeud.js. Très souple et modulaire. Il est livré avec sa propre bibliothèque d'assertion, mais vous pouvez ajouter votre propre si vous le souhaitez. Le assertions library est découplé, donc vous pouvez également l'utiliser avec d'autres coureurs de test. Au lieu d'utiliser assert(!...) ou expect(...).not... , il utilise refute(...) qui est une belle torsion imho.

Un navigateur de test JavaScript toolkit. Il fait des tests de navigateur avec l'automatisation de navigateur (penser JsTestDriver), qunit style de page HTML statique d'essais, de tests en tête des navigateurs (phantomjs, jsdom, ...), et plus encore. Jetez un oeil à l'aperçu !

Un Noeud.js tests boîte à outils. Vous obtenez la même bibliothèque de cas de test, bibliothèque d'assertion, etc. C'est également idéal pour navigateur hybride et noeud.JS code. Ecris ton cas avec Buster.JS et lancez les deux dans le noeud.js et dans un vrai navigateur.

Screencast: Buster.js pour commencer (2:45)

pros :

  • utilise un noeud.js, donc compatible avec Win / OS X / Linux
  • Exécuter des tests à partir du navigateur ou sans tête avec PhantomJS (bientôt)
  • Exécuter sur plusieurs clients à la fois
  • supporte les tests NodeJS
  • N'ont pas besoin d'exécuter le serveur/clients sur l'ordinateur de développement (non besoin de IE)
  • exécuter des tests à partir de la ligne de commande (peut être intégré dans ant/maven)
  • Écrire des tests xUnit ou BDD style
  • Supporte plusieurs cadres de test JavaScript
  • reporter les essais au lieu de les commenter
  • SinonJS construit en
  • Auto-exécuter des tests sur " enregistrer
  • possibilité de personnaliser:
    • L'étendre pour envelopper d'autres cadres d'essai (JsTestDriver intégré)
    • vos propres assertions / réfutations
    • Reporters (xunit XML, traditionnels points, spécifications, appuyez sur, teamcity et plus construit en)
    • personnaliser/remplacer le HTML qui est utilisé pour exécuter les tests de navigateur
  • intégration de TextMate et Emacs

Cons :

  • Stil en version bêta, donc peut être buggy
  • pas de plugin pour Eclipse / IntelliJ (encore)
  • ne regroupe pas les résultats par os/browser/version comme TestSwarm *. Il ne, cependant, d'imprimer le nom du navigateur et la version dans les résultats du test.
  • Sans historique des résultats des tests précédents comme TestSwarm *
  • N'est pas entièrement travailler sur windows à partir de mai 2014

* TestSwarm est également un serveur D'intégration continue, alors que vous avez besoin d'un serveur CI séparé pour Buster.js. Il produit cependant des rapports XML xUnit, donc il devrait ê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 stagiaire.

Jasmin

Jasmine

il s'agit d'un testeur côté client qui pourrait intéresser les développeurs familiers avec Ruby ou Ruby on Rails. La syntaxe est basée sur RSpec qui est utilisé pour les essais dans les projets de Rails.

Jasmine est un cadre de développement basé sur le comportement pour tester votre code JavaScript. Il ne dépend pas d'autres cadres JavaScript. Il ne nécessite pas de DOM.

si vous avez de l'expérience avec ce coureur, s'il vous plaît contribuer avec plus d'informations :)

Projet d'accueil: http://jasmine.github.io /

QUnit

QUnit se concentre sur la mise à l'essai du JavaScript dans le navigateur tout en fournissant autant de commodité au développeur que possible. Texte de présentation du site:

QUnit est une suite de test D'unité JavaScript puissante et facile à utiliser. Il est utilisé par les projets jQuery, jQuery UI et jQuery Mobile et est capable de tester n'importe quel 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 a obtenu sa propre maison, le nom et la documentation API, permettant à d'autres de l'utiliser pour leur unité de test aussi bien. À l'époque, il dépendait encore de jQuery. Une réécriture en 2009 a corrigé cela, maintenant QUnit fonctionne complètement autonome. Les méthodes d'assertion de QUnit suivent les tests de L'Unité CommonJS la spécification, qui était dans une certaine mesure influencée par le QUnit.

Projet d'accueil: http://qunitjs.com/

Sinon

un autre grand outil est sinon.js de Christian Johansen, l'auteur de Test-Driven JavaScript Development . Mieux décrit par lui-même:

Essai autonome espions, goujons et moqueries pour le JavaScript. Aucune dépendance fonctionne avec n'importe quel cadre d'essai unitaire.

Stagiaire

Le Stagiaire site Web fournit une fonctionnalité de comparaison pour les autres infrastructures de test sur cette liste. Il offre plus de fonctionnalités que tout autre système de test basé sur JavaScript.

JEST

Une nouvelle, mais encore très puissant framework de test. Il permet également des tests basés sur des instantanés, ce qui augmente la vitesse de test et crée une nouvelle dynamique en termes de test

regardez un de leurs discours: https://www.youtube.com/watch?v=cAKYQpTC7MA

mieux encore: pour commencer

1474
répondu gregers 2018-08-29 05:33:04

jetez un coup d'oeil à le harnais d'objet Dojo (DOH) unit test framework qui est à peu près un harnais indépendant du Cadre pour le test des unités JavaScript et qui n'a aucune dépendance de Dojo. Il y a une très bonne description de celui-ci à Unit testing Web 2.0 applications utilisant le harnais objectif de Dojo .

si vous voulez automatiser les tests de L'UI (un point sensible de nombreux développeurs) - cochez doh.robot (temporaire vers le bas. mise à jour: autre lien http://dojotoolkit.org/reference-guide/util/dohrobot.html ) et dijit.robotx (temporaire) . Ce dernier est conçu pour un test d'acceptation. Maj:

les articles référencés expliquent comment les utiliser, comment émuler un utilisateur interagissant avec votre UI en utilisant la souris et / ou le clavier, et comment enregistrer une session de test, donc vous pouvez "jouer" plus tard automatiquement.

63
répondu Eugene Lazutkin 2011-08-25 18:30:41

Chutzpah - A JavaScript Test Runner

j'ai créé un projet open source appelé Chutzpah qui est un coureur de test pour les tests de L'unité JavaScript. Chutzpah vous permet d'exécuter des tests D'unités JavaScript à partir de la ligne de commande et de L'intérieur de Visual Studio. Il prend également en charge l'exécution dans le TeamCity serveur d'intégration continue.

34
répondu Matthew Manela 2015-06-04 20:22:00

la section JavaScript de L'entrée Wikipédia, liste des cadres de tests unitaires , fournit une liste des choix disponibles. Il indique s'ils fonctionnent côté client, côté serveur, ou les deux.

26
répondu Pete TerMaat 2009-06-01 18:07:42

BusterJS

il y a aussi BusterJS de Christian Johansen, l'auteur de Test Driven Javascript Development et le Sinon framework. À partir de ce site:

Buster.JS est un nouveau cadre de test JavaScript. Il fait des tests de navigateur en automatisant des essais dans les navigateurs réels (pensez jstestdriver), ainsi que le noeud.js tests.

14
répondu Tauren 2015-11-08 13:32:10

google-js - test:

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

  • temps de démarrage et d'exécution de test extrêmement rapide, sans avoir à exécuter un navigateur.
  • sortie propre et lisible en cas de réussite ou d'échec aux tests.
  • A browser test-based runner that peut simplement être rafraîchie chaque fois que JS est changé.
  • Style et sémantique qui ressemblent à Google Test pour C++.
  • un cadre de moquerie intégré qui nécessite un code boilerplate minimal (par ex. $tearDown ou $verifyAll ) avec style et sémantique basée sur le Google Cadre De Moquerie C++ .

il n'y a actuellement aucun binaire pour Windows

10
répondu user 2017-01-05 14:30:10

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

QUnit

Pavlov , source

jsTestDriver , source

8
répondu Tom Stickel 2014-03-07 16:59:53

Vous avez "fonctionne sur la réelle navigateur" comme un pro, mais dans mon expérience, c'est un con parce qu'il est lent. Mais ce qui le rend précieux est le manque d'émulation JS suffisante des alternatives non-navigateur. Il se pourrait que si votre JS est assez complexe que seul un test de navigateur suffira, mais il y a quelques autres options à considérer:

HtmlUnit : "il a un assez bon support JavaScript (qui s'améliore constamment) et est capable pour travailler même avec des bibliothèques AJAX assez complexes, simulant soit Firefox ou Internet Explorer en fonction de la configuration que vous voulez utiliser."Si l'émulation est assez bon pour votre utilisation, il sera beaucoup plus rapide que la conduite d'un navigateur.

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

Celerity : API Watir tournant sur JRuby soutenu par HtmlUnit.

ou de même

Schnell : une autre enveloppe de HtmlUnit.

bien sûr si HtmlUnit n'est pas assez bon et que vous devez conduire un navigateur alors vous pourriez considérer Watir pour conduire votre JS .

6
répondu Jeffrey Fredrick 2008-11-19 06:11:18

YUI a un cadre de test ainsi. cette vidéo de Yahoo! Le théâtre est une belle introduction, bien que il ya beaucoup de notions de base sur l'ATS à l'avant.

ce framework est générique et peut être exécuté contre N'importe quelle bibliothèque JavaScript ou JS.

6
répondu Matthew Taylor 2013-02-26 11:03:25

vous pourriez également être intéressé par l'unité Test framework qui fait partie de qooxdoo , un cadre Ria open source similaire à Dojo, ExtJS, etc. mais avec une chaîne d'outils assez complète.

Essayer la version en ligne du lanceur . Astuce: appuyez sur la flèche grise en haut à gauche (devrait être rendue plus évidente). C'est un bouton "play" qui exécute les tests sélectionnés.

pour en savoir plus sur le Les classes JS qui vous permettent de définir vos tests unitaires, voir en ligne API viewer .

pour le test automatique de L'interface utilisateur (basé sur Selenium RC), consultez le projet simulateur .

3
répondu Andreas Ecker 2008-11-28 19:54:34

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

3
répondu Aaron Digulla 2009-02-25 10:18:13

nous avons ajouté L'intégration de JUnit à notre générateur de code Java à Javascript ST-JS ( http://st-js.org ). Le framework génère le Javascript correspondant tant pour le code testé que pour les tests unitaires et envoie le code à différents navigateurs.

il n'est pas nécessaire de disposer d'un serveur séparé puisque l'Unité de test runner ouvre le port http nécessaire (et le ferme une fois les tests terminés). Le framework manipule le StackTrace Java de sorte que le les asserts sont correctement affichés par le plugin 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
répondu alex.c 2013-11-12 17:20:52

MochiKit a un cadre de test appelé SimpleTest qui semble avoir pris sur. Voici un post de blog de l'auteur original .

2
répondu p.campbell 2009-07-22 16:12:39