web-dev-qa-db-fra.com

Karma vs cadre de test Jasmine, Moka, QUnit

Quelques questions:

  • Comment Karma et le framework de test X (Jasmine, Mocha, QUnit) sont-ils liés?
  • Quel est le framework équivalent dans Java world? Je suppose que Jasmine, Mocha, QUnit est égal à jUnit/TestNG. Qu'en est-il du Karma?
  • Puis-je exécuter le framework de test X (par exemple, Jasmine) sans Karma?
  • Karma est-il un test unitaire ou un test d’intégration/e2e? Ceci référence montre est pour le test unitaire, cependant this dit est pour le test e2e.
246
Lee Chee Kiam

Karma est un coureur de test de navigateur.

L'idée est que les navigateurs n'ont pas de manière native le concept de charger des fichiers de test, de les exécuter et de rapporter les résultats. Ce que fait le karma c'est (à peu près):

  • démarrage d'un petit serveur Web pour servir les fichiers javascript à tester "côté client" (1)
  • servir également les fichiers javascript "côté client" avec les tests (ou Specs, comme on les appelle souvent) (2)
  • servir une page Web personnalisée qui exécutera le code javascript pour les tests (3)
  • lancez un navigateur pour charger cette page (4)
  • signaler les résultats du test au serveur (5)
  • karma peut alors à nouveau rapporter les résultats dans des fichiers texte, la console, tout ce que votre serveur CI aime, etc.

En regardant chaque partie:

(1) Ces fichiers seront vos fichiers js réels; tu diras au karma comment les charger. Si vous utilisez requirejs, il existe un plugin karma, et une configuration est nécessaire.

(2) Ces tests peuvent être écrits dans une variété de frameworks de test Javascript (Jasmine, QUnit, Mocha); c'est le code JS qui est exécuté dans le navigateur.

(3) La page Web personnalisée sera un peu différente pour chaque framework de test; C'est pourquoi Karma a des plugins pour différents frameworks.

(4) Karma peut lancer la page dans de nombreux navigateurs (FF, Chrome ou sans navigateur, comme PhantomJs.)

(5) La déclaration au karma est, encore une fois, dépendante de la structure et concerne les plugins de karma.

Donc pour répondre à vos questions:

  • en Java, la plupart des gens utilisent JUnit, qui est à la fois un framework pour écrire et exécuter des tests, mais ne pose pas le problème de la différenciation de l'environnement dans lequel les tests sont exécutés et de celui dans lequel les rapports de test sont agrégés; le karma serait la pièce manquante entre une suite JUnit et un TestRunner JUnit
  • Oui, vous pouvez faire tout ce que le karma fait "à la main" - choisissez un cadre (jasmin, qunit, moka) et suivez les instructions. L'avantage du karma est qu'il fournit une solution prête à l'emploi, si vous êtes dans une configuration standard.
  • Karma peut être utilisé à la fois pour les tests unitaires (avec jasmine/qunit/what) et pour les tests d'intégration (qui utilisent une autre API, telle que webdriver, pour piloter le navigateur).
400
phtrivier

Un moyen plus court de comprendre la différence:

Les personnes qui testent avec Jasmine/Mocha sont très probablement en train d'exécuter tout le code avec la machine virtuelle Node.

L'ajout de Karma au mélange (au-dessus de la structure existante de votre choix) lancera votre suite de tests avec le moteur des autres navigateurs.

En faisant cela, vous obtenez les petits extras que vous obtenez avec un environnement de navigateur. Il sera plus facile de tester le code lié au DOM, mais vous abandonnerez également les ressources supplémentaires fournies par le moteur Node (comme l’accès au système de fichiers/Shell).

65
SystematicFrank

La thèse du concepteur de Karma était très informative en décrivant les solutions existantes et en les comparant, et bien sûr en décrivant le Karma lui-même.

https://github.com/karma-runner/karma/blob/master/thesis.pdf

Résumé: Karma est un coureur de test. Il peut être utilisé par QUnit, Jasmine, Mocha, ... Karma présente des avantages par rapport aux autres testeurs pour améliorer votre cycle de développement TDD/BDD. Il "surveille" les fichiers. Ainsi, lorsque vous enregistrez une modification, Karma exécute des tests et en rend compte instantanément, sans changer de contexte vers le navigateur Web pour exécuter le test.

En bref, peut-être que la question devrait être Karma ET Jasmine ou Moka ou QUnit?

32
mauricio777