Couverture de code pour Jest

131

Existe-t-il un moyen d'avoir une couverture de code dans le cadre de test Javascript Jest qui est construit sur Jasmine?

Le cadre interne n'imprimer la couverture du code qu'il obtient. J'ai aussi essayé d'utiliser Istanbul , couverture et JSCover , mais aucun d'entre eux travaillent.

Alex Palcuie
la source
Je ne plaisante pas, mais avez-vous vu config.collectCoverage ?
Ciro Costa

Réponses:

123

Lors de l'utilisation de Jest 21.2.1 , je peux voir la couverture de code sur la ligne de commande et créer un répertoire de couverture en passant --coverageau script Jest. Voici quelques exemples:

J'ai tendance à installer Jest localement, auquel cas la commande pourrait ressembler à ceci:

npx jest --coverage

Je suppose (bien que je n'ai pas confirmé), que cela fonctionnerait également si j'installais Jest globalement:

jest --coverage

Les documents très rares sont ici

Lorsque j'ai navigué dans le répertoire coverage / lcov-report , j'ai trouvé un fichier index.html qui pouvait être chargé dans un navigateur. Il comprenait les informations imprimées sur la ligne de commande, ainsi que des informations supplémentaires et une sortie graphique.

ccalvert
la source
7
N'utilisez jamais de modules globaux. Pour garantir la cohérence des versions et la présence du package, utilisez toujours l'exécutable dans node_modulesvia ./node_modules/.bin/jest --coverage. Tant que le package est nommé dans package.json, vous pouvez garantir l'exécution avec la version exacte de jest que vous attendez.
taystack
Comment obtenir une couverture de plaisanterie uniquement pour les fichiers modifiés?
Shanika Ediriweera
Existe-t-il un moyen simple d'échouer les tests si la couverture est inférieure à une certaine limite? Question SO correspondante: stackoverflow.com/questions/60512167/…
Stefan
@ShanikaEdiriweera jestjs.io/docs/en/cli.html#--collectcoveragefromglob
marcellothearcane
88

MISE À JOUR: 20/07/2018 - Ajout de liens et mise à jour du nom pour les reporters de couverture.

MISE À JOUR: 14/08/2017 - Cette réponse est totalement obsolète. Regardez simplement les documents Jest maintenant. Ils ont un support officiel et une documentation sur la façon de procéder.

@hankhsiao a un dépôt fourchu où Istanbul travaille avec Jest. Ajoutez ceci à vos dépendances de développement

 "devDependencies": {
     "jest-cli": "git://github.com/hankhsiao/jest.git"
 }

Assurez-vous également que la couverture est activée dans votre entrée jest package.json et vous pouvez également spécifier les formats souhaités. (Le html est plutôt mauvais).

 "jest": {
     "collectCoverage": true,
     "coverageReporters": ["json", "html"],
 }

Voir la documentation Jest pour la couverture des reporters (la valeur par défaut est ["json", "lcov", "text"])

Ou ajoutez --coveragelorsque vous invoquez la plaisanterie.

Adrian Adkison
la source
1
L'option coverageFormats a été supprimée - il semble que json et html soient tous deux générés à chaque fois.
1
J'utilise l'option --coverage mais il ne se passe absolument rien de différent.
gbbr
3
Il est (maintenant) appelé coverageReporterset la valeur par défaut est ["json", "lcov", "text"]. Voir facebook.github.io/jest/docs/…
Karsten S.
ne fonctionne pas, l'option inconnue "coverageFormats" avec la valeur ["json", "html"] a été trouvée.
srghma
40

Janvier 2019: Jest version 23.6

Pour toute personne examinant cette question récemment, en particulier si vous testez en utilisant npmou yarndirectement

Actuellement, vous n'avez pas à modifier les options de configuration

Selon le site officiel de Jest , vous pouvez faire ce qui suit pour générer des rapports de couverture:

1- Pour npm:

Vous devez mettre --avant de passer l' --coverageargument de plaisanterie

npm test -- --coverage

si vous essayez d'appeler --coveragedirectement sans le --cela ne fonctionnera pas

2- Pour le fil:

Vous pouvez passer l' --coverageargument de plaisanterie directement

yarn test --coverage
Ahmed Elkoussy
la source
1
Comment obtenir une couverture de plaisanterie uniquement pour les fichiers modifiés?
Shanika Ediriweera
Changé depuis quand? Vous souhaitez probablement utiliser le --watchparamètre pour cela.
koehn
1
Cette réponse fait beaucoup d'hypothèses sur l'état des uns package.json.
airtonix
6

Très bien, ignorez ma réponse précédente car quelqu'un m'a dit qu'elle n'avait pas résolu le problème.

Nouvelle réponse:

1) Vérifiez la dernière plaisanterie (v 0.22): https://github.com/facebook/jest

2) L'équipe Facebook place Istanbul dans le cadre du rapport de couverture et vous pouvez l'utiliser directement.

3) Après avoir exécuté jest, vous pouvez obtenir le rapport de couverture sur la console et sous le dossier racine défini par jest, vous trouverez le rapport de couverture au format json et html.

4) FYI, si vous installez à partir de npm, vous pourriez ne pas obtenir la dernière version; alors essayez d'abord le github et assurez-vous que la couverture est ce dont vous avez besoin.


Ancienne réponse:

J'ai aussi le même problème. La réponse courte est: Istanbulet Jestne travaillent PAS ensemble.

Consultez les pages suivantes pour plus de détails:

https://github.com/facebook/jest/issues/101

jest utilise contextify qui exécute des scripts JS dans un contexte V8 en code natif, contournant ainsi tous les hooks require et vm.runInThisContext d'istanbul. Ainsi, istanbul cover ne fonctionnera pas car les fonctions standard hookable node.js ne sont pas utilisées et les fichiers de pré-instrumentation n'aideront pas non plus car chaque test s'exécute dans son propre bac à sable et il n'y a pas de global dans lequel cacher l'objet de couverture.

@Ciro Costa: Le config.collectCoveragene fonctionne PAS, car c'est une fonction «TODO». Veuillez vérifier le code source.

Les hivers
la source
La question était de savoir comment obtenir une couverture de code pour Jest. Que Istanbul et Jest ne travaillent pas ensemble est peut-être vrai, mais cela ne répond pas à la question.
David Raab
0

Si vous rencontrez des problèmes avec --coverage ne fonctionne pas, cela peut également être dû au fait que les reporters de couverture sont activés sans que 'texte' ou 'résumé de texte' ne soit ajouté. Dans la documentation: "Remarque: la définition de cette option écrase les valeurs par défaut. Ajoutez" texte "ou" texte-résumé "pour voir un résumé de la couverture dans la sortie de la console." La source

thebkr7
la source
0

Configurez votre fichier package.json

"test": "jest --coverage",

entrez la description de l'image ici

Maintenant, exécutez:

yarn test

Tout le test commencera à s'exécuter et vous obtiendrez le rapport. entrez la description de l'image ici

Saif Siddiqui
la source
-1

J'ai eu le même problème et je l'ai résolu comme ci-dessous.

  1. installer du fil npm install --save-dev yarn
  2. installer jest-cli npm install --save-dev jest-cli
  3. ajoutez ceci au package.json "jest-coverage": "yarn run jest -- --coverage"

Après avoir écrit les tests, exécutez la commande npm run jest-coverage. Cela créera un dossier de couverture dans le répertoire racine. /coverage/icov-report/index.html a la vue html de la couverture du code.

Bon codage!

Laksh
la source
8
Il n'est pas nécessaire d'installer du fil. Yarn est juste un gestionnaire de packages différent de NPM
Noir
-10

Essayez Chutzpah . Je viens de l'utiliser. Et j'ai blogué à ce sujet sur la façon d'intégrer dans Visual Studio.

Voici comment j'ai codé la couverture avec Chutzpah: http://francorobles.wordpress.com/2014/09/14/code-coverage-with-chutzpah/

francorobles
la source
Chutzpath est construit sur Blanket et j'ai précisé ci-dessus que Jest ne fonctionne pas avec.
Alex Palcuie
Intéressant parce que le mien a fonctionné. francorobles.wordpress.com/2014/09/14/…
francorobles
1
Vous n'utilisez pas Jest, qui par défaut se moque de tous les fichiers require.
Alex Palcuie le