web-dev-qa-db-fra.com

Couverture de code pour Jest

Existe-t-il un moyen d’avoir une couverture de code dans le framework de test Javascript Jest qui repose sur Jasmine?

Le cadre interne n’est pas affiche la couverture de code qu’il reçoit. J'ai aussi essayé d'utiliser Istanbul , blanket et JSCover , mais aucun d'eux ne fonctionne.

58
Alex Palcuie

Lorsque vous utilisez 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 transmettant --coverage au script Jest. Ci-dessous quelques exemples:

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

npx jest --coverage

Je suppose (même si ce n’est pas confirmé) que cela fonctionnerait aussi si j’installais Jest globalement:

jest --coverage

Les documents très rares sont ici

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

29
ccalvert

UPDATE: 20/07/2018 - Ajout de liens et nom mis à jour pour les reporters de couverture.

MISE À JOUR: 8/14/2017 - Cette réponse est totalement obsolète. Il suffit de regarder la documentation Jest maintenant. Ils ont un soutien officiel et de la documentation sur la façon de le faire.

@hankhsiao a un repo forké où Istanbul travaille avec Jest. Ajoutez ceci à vos dépendances de dev

 "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 de votre choix. (Le html est assez mauvais cul).

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

Voir Documentation Jest pour couvertureReporteurs (la valeur par défaut est ["json", "lcov", "text"])

Ou ajoutez --coverage lorsque vous invoquez une plaisanterie.

61
Adrian Adkison

Jan 2019: Jest version 23.6

Pour ceux qui se penchent sur cette question récemment surtout si vous testez directement avec npm ou le fil

Actuellement, vous n'avez pas besoin de changer les options de configuration.

Selon le site Web officiel de jest , vous pouvez procéder comme suit pour générer des rapports de couverture:

1- Pour npm:

Vous devez mettre -- avant de passer l'argument --coverage de jest

npm test -- --coverage

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

2- Pour le fil:

Vous pouvez passer directement l'argument --coverage de jest

yarn test --coverage
8
Ahmed Elkoussy

Bon, ignorez ma réponse précédente car quelqu'un m'a dit que cela ne résolvait pas le problème.

Nouvelle réponse: 

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

2) L’équipe de Facebook inclut l’istanbul dans le rapport de couverture et vous pouvez l’utiliser directement.

3) Après avoir exécuté jest, vous pouvez obtenir un 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) Pour votre information, si vous installez à partir de npm, vous risquez de ne pas obtenir la dernière version. essayez donc d’abord le github et assurez-vous que la couverture est celle dont vous avez besoin.


Ancienne réponse:

Vous avez le même problème aussi. La réponse courte est: Istanbul et Jest ne 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 les scripts JS dans un contexte V8 en code natif, ignorant ainsi tous les hooks require et vm.runInThisContext d'istanbul. Ainsi, la couverture istanbul ne fonctionnera pas, car les fonctions standard hookables de node.js ne sont pas utilisées et les fichiers de pré-instrumentation ne seront d'aucun secours, car chaque test s'exécute dans son propre bac à sable et qu'il n'y a pas de cache global pour l'objet de couverture.

@Ciro Costa: Le config.collectCoverage ne fonctionne PAS car il s'agit d'une fonction 'TODO'. S'il vous plaît vérifier le code source.

4
Winters

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

  1. installer le fil npm install --save-dev yarn
  2. installez 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 de code.

Bonne codage! 

0
Laksh

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 ajout de 'texte' ou de 'résumé de texte'. Dans la documentation: "Remarque: la définition de cette option écrase les valeurs par défaut. Ajoutez" texte "ou" résumé de texte "pour afficher un résumé de la couverture dans la sortie de la console." Source

0
thebkr7