tuto - test unitaire javascript jasmine




Outils de test unitaires JavaScript pour TDD (9)

BusterJS

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

Buster.JS est un nouveau framework de test JavaScript. Il effectue des tests de navigateur en automatisant les tests dans les navigateurs actuels (pensez à JsTestDriver), ainsi que les tests Node.js.

J'ai examiné et pris en compte de nombreux tests unitaires et outils de test JavaScript, mais j'ai été incapable de trouver une option appropriée pour rester entièrement conforme à la norme TDD. Alors, y a-t-il un outil de test unitaire JavaScript totalement compatible TDD?


Karma ou Protractor

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

Le rapporteur est pour les tests de bout en bout et utilise Selenium Web Driver pour conduire des tests.

Les deux ont été faites par l'équipe Angular. Vous pouvez utiliser n'importe quelle bibliothèque d'assertion avec l'une ou l'autre.

Screencast: Karma Mise en route

lié :

avantages :

  • Utilise node.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 le serveur / clients sur l'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
  • Prend en charge plusieurs frameworks de test JavaScript
  • Auto-exécuter des tests sur enregistrer
  • Requêtes de proxies inter-domaines
  • Possibilité de personnaliser:
    • Étendez-le pour envelopper d'autres frameworks de test (Jasmine, Mocha, QUnit built-in)
    • Vos propres affirmations / réfutations
    • Reporters
    • Lanceurs de navigateur
  • Plugin pour WebStorm
  • Pris en charge par l'IDE Netbeans

Contre :

  • Ne prend pas en charge les tests NodeJS (backend)
  • Pas de plugin pour Eclipse (pour l'instant)
  • Aucun historique des résultats des tests précédents

mocha.js

Je ne suis pas du tout qualifié pour commenter les caractéristiques, les points forts et les points faibles de mocha.js, mais il m'a été recommandé par quelqu'un de confiance dans la communauté JS.

Liste des fonctionnalités, tel que rapporté par son site web:

  • support du navigateur
  • soutien asynchrone simple, y compris les promesses
  • rapport de couverture de test
  • support de chaîne de diff
  • javascript # API pour exécuter des tests
  • état de sortie correct pour le support CI, etc.
  • détecte automatiquement et désactive la coloration pour les non-ttys
  • mappe les exceptions non interceptées au cas de test correct
  • support du délai d'attente du test async
  • délais d'expiration spécifiques au test
  • support de notification de growl
  • rapports tests durées
  • souligne les tests lents
  • support de l'observateur de fichiers
  • détection de fuite variable globale
  • exécuter éventuellement des tests correspondant à une expression rationnelle
  • auto-exit pour empêcher "accrochage" avec une boucle active
  • générez facilement des suites et des cas de test
  • Support du fichier mocha.opts
  • titres de suites cliquables pour filtrer l'exécution des tests
  • prise en charge 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
  • test DSL extensible ou "interfaces"
  • avant, après, avant chacun, après chaque crochet
  • support de transpiler arbitraire (café-script etc)
  • Bundle TextMate

yolpo

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

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 montrer et dire leur API. De tels cas d'utilisation constituent la base des tests de régression.

AVA

AVA

Coureur d'essai futuriste avec support intégré pour ES2015. Même si JavaScript est monothread, 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 lourds IO. De plus, les fichiers de test sont exécutés en parallèle en tant que processus distincts, ce qui vous offre des performances encore meilleures et un environnement isolé pour chaque fichier de test.

  • Minimal et rapide
  • Syntaxe de test simple
  • Exécute des tests simultanément
  • Applique l'écriture de tests atomiques
  • Pas de globals implicites
  • Environnement isolé pour chaque fichier de test
  • Ecrivez vos tests en ES2015
  • Promettre le soutien
  • Prise en charge de la fonction générateur
  • Support de fonction asynchrone
  • Support observable
  • Affirmations améliorées
  • Option TAP facultative
  • Nettoyer les traces de pile

Buster.js

Un testeur de code JavaScript construit avec Node.js. Très modulaire et flexible. Il possède 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 l'utiliser avec d'autres testeurs. Au lieu d'utiliser assert(!...) ou expect(...).not... , il utilise refute(...) ce qui est une belle torsion imho.

Une boîte à outils de test JavaScript pour 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 tête (phantomjs, jsdom, ...), et plus encore. Jetez un oeil à la vue d'ensemble !

Une boîte à outils de test Node.js. Vous obtenez la même bibliothèque de cas de test, la même bibliothèque d'assertions, etc. C'est également idéal pour le navigateur hybride et le code Node.js. Écrivez votre cas de test avec Buster.JS et exécutez-le à la fois dans Node.js et dans un vrai navigateur.

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

avantages :

  • Utilise node.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
  • Prend en charge les tests NodeJS
  • Pas besoin d'exécuter le serveur / clients sur l'ordinateur de développement (pas besoin d'IE)
  • Exécuter des tests à partir de la ligne de commande (peut être intégré dans ant / maven)
  • Écrire des tests xUnit ou BDD
  • Prend en charge plusieurs frameworks de test JavaScript
  • Reporter les tests au lieu de les commenter
  • SinonJS intégré
  • Auto-exécuter des tests sur enregistrer
  • Requêtes de proxies 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 de TextMate et Emacs

Contre :

  • Stil en bêta peut donc être bogué
  • Pas de plugin pour Eclipse / IntelliJ (pas encore)
  • Ne regroupe pas les résultats par os / browser / version comme TestSwarm *. Cependant, il imprime le nom et la version du navigateur dans les résultats du test.
  • Aucun historique des résultats des 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, alors que vous avez besoin d'un serveur CI distinct pour Buster.js. Il produit cependant des rapports XML xUnit, il devrait donc être facile de l'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.

Jasmine

Ceci est un test-côté client qui pourrait intéresser les développeurs familiers avec Ruby ou Ruby on Rails. La syntaxe est basée sur RSpec utilisée pour les tests dans les projets Rails.

Jasmine est un framework de développement orienté comportement pour 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 test coureur, s'il vous plaît contribuer avec plus d'informations :)

Maison du projet: Jasmine

QUnit

QUnit met l'accent sur le test de JavaScript dans le navigateur tout en offrant le plus de confort possible au développeur. Blurb sur le 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 n'importe quel code JavaScript générique

QUnit partage un peu d'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 documentation sur la maison, le nom et l'API, ce qui a permis à d'autres utilisateurs de l'utiliser pour leurs tests unitaires. A l'époque, cela dépendait toujours de jQuery. Une réécriture en 2009 a corrigé cela, maintenant QUnit fonctionne complètement autonome. Les méthodes d'assertion de QUnit sont conformes à la spécification CommonJS Unit Testing, qui a été dans une certaine mesure influencée par QUnit.

Projet home: QUnit

Sinon

Un autre bon outil est le site sinon.js de Christian Johansen, l'auteur de Test-Driven JavaScript Development . Meilleur décrit par lui-même:

Spies de test autonomes, stubs et mocks pour JavaScript. Aucune dépendance ne fonctionne avec un framework de test unitaire.

Interne

Le site Web du stagiaire fournit une comparaison directe des caractéristiques des autres cadres de test de cette liste. Il offre plus de fonctionnalités que n'importe quel autre système de test basé sur JavaScript.


google-js-test:

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

  • Démarrage du test extrêmement rapide et temps d'exécution, sans avoir à exécuter un navigateur.
  • Sortie propre et lisible dans le cas des tests réussis et échoués.
  • Un coureur de test basé sur un navigateur qui peut simplement être actualisé chaque fois que JS est modifié.
  • Style et sémantique qui ressemblent à Google Test pour C ++.
  • Un cadre de moquerie intégré qui requiert un code standard minimal (par exemple, pas de $tearDown ou $verifyAll ) avec un style et une sémantique basés sur le cadre $verifyAll Google C ++ .

Il n'y a actuellement aucun binaire pour Windows


Jetez un coup d'œil à la structure de test de l'unité Dojo Object Harness (DOH) qui est à peu près indépendante du framework pour les tests unitaires JavaScript et qui n'a aucune dépendance de Dojo. Il y en a une très bonne description à l' unité de test des applications Web 2.0 en utilisant le Dojo Objective Harness .

Si vous voulez automatiser le test de l'interface utilisateur (un point sensible de nombreux développeurs) - consultez doh.robot (temporaire down. update: autre lien http://dojotoolkit.org/reference-guide/util/dohrobot.html ) et dijit.robotx (bas temporaire) . Ce dernier est conçu pour un test d'acceptation. Mettre à 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 de pouvoir la "lire" plus tard automatiquement.


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

Il n'y a pas besoin de serveur séparé lorsque le lanceur de tests unitaires ouvre le port http nécessaire (et le ferme une fois les tests terminés). Le framework manipule la stacktrace Java de sorte que les asserts échoués soient 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;
  }
}


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


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 du testrunner . Astuce: appuyez 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, consultez la visionneuse d'API en ligne.

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






tdd