web-dev-qa-db-fra.com

Comment lire un rapport de couverture d'Istanbul?

J'ai toujours utilisé Jasmine pour mes tests unitaires, mais récemment, j'ai commencé à utiliser Istanbul pour me fournir des rapports de couverture de code. Je veux dire que je comprends le Gist de ce qu’ils essaient de me dire, mais je ne sais pas vraiment ce que chacun de ces pourcentages représente (Stmts, Branches, Funcs, Lines). Jusqu'à présent, j'ai été incapable de trouver une explication/ressource solide sur Google. 

Question : Comme je l’ai dit, j’en ai compris le sens, mais est-ce que quelqu'un peut poster une explication appropriée ou un lien vers une explication appropriée?

Question tertiaire : Est-il possible d'identifier quelles parties spécifiques de votre code ne sont pas couvertes? Jusqu'à présent, sans vraiment critiquer ce rapport, je le devine en gros.

-------------------|-----------|-----------|-----------|-----------|
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 |
-------------------|-----------|-----------|-----------|-----------|
83
Scott Sword

Il existe un certain nombre de critères de couverture, les principaux étant:

  • Couverture des fonctions Chaque fonction (ou sous-routine) du programme a-t-elle été appelée?
  • Couverture des états Chaque état du programme a-t-il été exécuté?
  • Couverture de branche Chaque branche (également appelée chemin DD) de chaque structure de contrôle (telle que dans les instructions if et case) a-t-elle été exécutée? Par exemple, étant donné une instruction if, les branches true et false ont-elles été exécutées? Une autre façon de dire est que tous les Edge du programme ont-ils été exécutés?
  • Couverture de ligne chaque ligne exécutable du fichier source a-t-elle été exécutée?

Pour chaque cas, le pourcentage représente code exécuté vs code non exécuté, ce qui équivaut à chaque fraction au format de pourcentage (par exemple: 50% de branches, 1/2).

Dans le rapport de dossier:

  • 'E' signifie 'else path non emprunté', ce qui signifie que pour l'instruction marquée if/else, 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é.
  • La colonne xN de gauche correspond au nombre de fois que cette ligne a été exécutée.
  • Les lignes ou morceaux de code non exécutés seront surlignés en rouge.

Cela a été vérifié pour Istanbul v0.4.0, je ne sais pas si cela est toujours valable pour les versions ultérieures, mais cette bibliothèque étant basée sur de solides principes théoriques, le comportement ne devrait pas trop changer pour les versions plus récentes.

Il fournit également des codes de couleur - 

Pink: déclarations non couvertes.

Orange: fonctions non couvertes.

Jaune: branches non couvertes.

Documents complets sur Istanbul ici:

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

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

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

J'espère que ça aide!

131
Amy Pellegrini

L'exécution d'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. Il en va de même pour les lignes et les déclarations (qui seront généralement proches les unes des autres, sauf si vous avez des déclarations très longues) . Les branches désignent des points de décision tels que des blocs if-else. Par exemple, supposons que votre code ne contienne qu'une seule instruction if-else et que vos tests ne transmettent que la partie if mais pas la partie else; le pourcentage de vos branches doit alors être de 50%.

J'espère que cela rend les choses plus claires.

6
yarons

Ajout aux réponses précédentes

Le pourcentage de déclarations est calculé en prenant un pourcentage du nombre de déclarations couvertes par votre test, par exemple 12/18 * 100 = 66,67%. Cela signifie que votre test ne couvrait que 66,67%.

Le% Branch est également calculé de la même manière. Idem pour vos lignes% Fonctions et %.

Dans le répertoire racine de votre projet, il existe un dossier de couverture contenant la sortie HTML de votre test. Cliquez dessus et affichez-le dans le navigateur. Vous devriez voir quelque chose comme ça

Image montrant les résultats de vos tests

J'espère que cela vous aide à mieux comprendre.

0
Samuel Pinheiro