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 |
-------------------|-----------|-----------|-----------|-----------|
Il existe un certain nombre de critères de couverture, les principaux étant:
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é.xN
de gauche correspond au nombre de fois que cette ligne a été exécutée.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!
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.
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.