Comment lire un rapport sur la couverture d’Istanbul?

J’ai toujours utilisé Jasmine pour mes tests unitaires, mais j’ai récemment utilisé Istanbul pour me donner des rapports de couverture de code. Je veux dire que je comprends l’ essentiel de ce qu’ils essaient de me dire, mais je ne sais pas vraiment ce que chacun de ces pourcentages représente (résultats, twigs, fonctions, lignes). Jusqu’à présent, Google n’a pas pu trouver une explication / ressource solide.

Question : Comme je l’ai dit, je comprends l’essentiel, mais quelqu’un peut-il afficher soit une explication correcte, soit un lien vers une explication correcte?

Question tertiaire : Existe-t-il un moyen d’identifier quelles parties spécifiques de votre code ne sont pas couvertes? Jusqu’à présent, sans vraiment critiquer ce rapport, je devine essentiellement.

-------------------|-----------|-----------|-----------|-----------| File | % Stmts |% Branches | % Funcs | % Lines | -------------------|-----------|-----------|-----------|-----------| controllers/ | 88.1 | 77.78 | 78.57 | 88.1 | dashboard.js | 88.1 | 77.78 | 78.57 | 88.1 | -------------------|-----------|-----------|-----------|-----------| All files | 88.1 | 77.78 | 78.57 | 88.1 | -------------------|-----------|-----------|-----------|-----------| 

Il existe plusieurs critères de couverture, les principaux étant:

  • Couverture de la fonction Chaque fonction (ou sous-programme) du programme a-t-elle été appelée?
  • Couverture de déclaration Est-ce que chaque déclaration du programme a été exécutée?
  • Couverture de twig Chaque twig (également appelée DD-path) de chaque structure de contrôle (comme dans les instructions if et case) a-t-elle été exécutée? Par exemple, avec une instruction if, les twigs true et false ont-elles été exécutées? Une autre façon de le dire est que chaque avantage du programme a-t-il été exécuté?
  • La couverture de ligne a-t-elle été exécutée sur chaque ligne exécutable du fichier source?

Pour chaque cas, le pourcentage représente le code exécuté par rapport au code non exécuté , ce qui correspond à chaque fraction en pourcentage (par exemple: 50% des twigs, 1/2).

Dans le rapport de fichier:

  • 'E' signifie «else path not taken», ce qui signifie que pour l’instruction if / else marquée, le chemin «if» a été testé mais pas le «else».
  • 'I' signifie “si le chemin n’est pas pris”, ce qui est le cas contraire: le “si” n’a pas été testé.
  • Le xN dans la colonne de gauche est le nombre de fois où cette ligne a été exécutée.
  • Les lignes non exécutées ou les morceaux de code seront surlignés en rouge.

Cela a été vérifié pour Istanbul v0.4.0, je ne suis pas sûr que cela s’applique toujours aux versions suivantes, mais comme cette bibliothèque est basée sur des principes théoriques solides, le comportement ne devrait pas trop changer pour les nouvelles versions.

Il fournit également des codes de couleur –

Rose : déclarations non couvertes.

Orange : fonctions non couvertes.

Jaune : twigs non couvertes.

Des documents complets sur Istanbul ici:

https://gotwarlost.github.io/istanbul/public/apidocs/index.html

Pour une théorie plus approfondie sur la couverture du code:

https://en.wikipedia.org/wiki/Code_coverage

J’espère que cela aide!

Exécuter istanbul devrait également produire un fichier HTML pour le rapport (devrait se trouver dans le dossier de couverture). Ce code HTML devrait vous donner des informations détaillées lorsque vous cliquez sur des fichiers / dossiers.

Le pourcentage de fonctions couvertes est calculé par le nombre de fonctions appelées lors des tests, divisé par le nombre total de fonctions. Même chose pour les lignes et les relevés (qui sont généralement proches les uns des autres, sauf si vous avez de très longues déclarations). Les twigs signifient des points de décision comme if-else blocs if-else . Par exemple, supposons que votre code ne contienne qu’une seule instruction if-else et que vos tests ne passent que par la partie if mais pas par la partie else , alors le pourcentage de vos twigs doit être de 50%.

Espérons que cela rend les choses plus claires.