Karma vs framework de test Jasmine, Mocha, QUnit [fermé]

258

Quelques questions:

  • Comment Karma et le framework de test X (Jasmine, Mocha, QUnit) sont-ils liés?
  • Quel est le framework équivalent au monde Java? Je suppose que Jasmine, Mocha, QUnit est égal à jUnit / TestNG. Et le Karma?
  • Puis-je exécuter le framework de test X (par exemple Jasmine) sans Karma?
  • Karma est-il pour le test unitaire ou le test d'intégration / e2e? Cette référence montre que c'est pour le test unitaire, mais cela est dit pour le test e2e.
Lee Chee Kiam
la source
Nous
exécutons mocha

Réponses:

419

Karma est un lanceur de test de navigateur.

L'idée est que les navigateurs n'ont pas nativement un concept de chargement des fichiers de tests, de les exécuter et de rapporter les résultats. Ce que fait le karma est (grosso modo):

  • démarrage d'un petit serveur web pour servir des fichiers javascript "côté client" à tester (1)
  • servir également les fichiers javascript "côté client" avec les tests (ou spécifications, 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 aux 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; vous direz au karma comment les charger. Si vous utilisez requirejs, il existe un plugin de karma et une configuration est nécessaire.

(2) Ces tests peuvent être écrits dans une variété de framework de test Javascript (Jasmine, QUnit, Mocha); c'est du 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 navigateurs sans tête comme PhantomJs.)

(5) Les rapports au karma sont, encore une fois, dépendants du framework et traités avec les plugins de karma.

Alors pour répondre à vos questions:

  • en Java, la plupart des gens utilisent JUnit qui est à la fois un framework pour écrire des tests et les exécuter, mais n'a pas le problème de différencier l'environnement dans lequel les tests sont exécutés et celui dans lequel les rapports de test sont agrégés; le karma serait la pièce manquante entre une suite JUnit et un JUnit TestRunner
  • Oui, vous pouvez faire tout ce que fait le karma "à la main" - choisissez un cadre (jasmin, qunit, mocha) 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 / que ce soit) et les tests d'intégration (qui utiliseront une autre API, comme un pilote Web, pour piloter le navigateur)
phtrivier
la source
59
Cela mérite un article de blog ou quelque chose.
Willa
Karma peut lancer la page dans de nombreux navigateurs (FF, Chrome ou navigateurs sans tête comme PhantomJs.)? Jasmine a-t-elle raison? nous pouvons le tester sur de nombreux frameworks et choisir cette configuration dans conf js
Wang'l Pakhrin
1
@ Wang'lPakhrin Vous pouvez bien sûr utiliser le jasmin avec (m) n'importe quel navigateur. Ce que je voulais dire, c'est que, techniquement, le karma peut lancer (m) tous les navigateurs dans lesquels vous souhaitez tester. Au moment d'écrire ces lignes, jasmine n'était pas responsable du démarrage des navigateurs (je ne pense toujours pas que ce soit le cas.) En espérant que cela clarifie les choses!
phtrivier
thejsguy.com/2015/01/12/jasmine-vs-mocha-chai-and-sinon.html "Jasmine vs. Mocha, Chai et Sinon"
escapedcat
1
@Willa J'ai créé une vidéo YouTube sur la base de cette réponse youtube.com/watch?v=bJc078szrZA :)
bersling
70

Une façon plus courte de comprendre la différence:

Les personnes qui testent avec Jasmine / Mocha ordinaire exécutent très probablement tout le code avec la machine virtuelle Node.

Ajouter Karma au mix (en plus de votre framework de choix existant) lancera votre suite de tests avec le moteur d'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 DOM, mais vous abandonnerez également les ressources supplémentaires fournies par le moteur Node (comme l'accès au système de fichiers / shell)

SystematicFrank
la source
34

La thèse du gars qui a conçu Karma a été très informative pour décrire les solutions existantes et les comparer, et bien sûr pour décrire le Karma lui-même

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

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

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

mauricio777
la source
2
Pourriez-vous un petit résumé, à partir du lien. Cela améliore votre réponse
winner_joiner
1
Le karma peut-il exécuter des tests Jest?
SuperUberDuper
vous pouvez aussi regarder dans Jasmine? Je pense que oui, mais je ne me souviens pas.
Wang'l Pakhrin
@ Wang'l Pakhrin Je ne sais pas que Jasmine a une fonctionnalité de montre, j'utilise juste nodemon. "nodemon --exec jasmine" et chaque fois que vous enregistrez un fichier, il exécute les tests.
snowfrogdev
La thèse ne mentionne pas Jasmine.
Carl G