J'ai toujours utilisé Jasmine pour mes tests unitaires, mais récemment, j'ai commencé à utiliser 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 (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 comprends l'essentiel, mais quelqu'un peut-il publier une explication correcte ou un lien vers une explication correcte?
Question tertiaire : existe-t-il un moyen d'identifier les parties spécifiques de votre code qui ne sont pas couvertes? Jusqu'à présent, sans vraiment grokking ce rapport, je 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 |
-------------------|-----------|-----------|-----------|-----------|
la source
Réponses:
Il existe un certain nombre de critères de couverture, les principaux étant:
Pour chaque cas, le pourcentage représente le code exécuté par rapport au code non exécuté , ce qui équivaut à chaque fraction au format pour cent (par exemple: 50% de branches, 1/2).
Dans le rapport de fichier:
'E'
signifie 'else chemin non pris', 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 emprunté», ce qui est le cas contraire: le «si» n'a pas été testé.xN
colonne de gauche indique le nombre de fois que la ligne a été exécutée.Cela a été vérifié pour Istanbul v0.4.0, je ne suis pas sûr que cela s'applique toujours aux versions ultérieures, mais comme cette bibliothèque est basée sur des principes théoriques solides, le comportement ne devrait pas trop changer pour les versions plus récentes.
Il fournit également des codes couleur -
Rose : déclarations non couvertes.
Orange : fonctions non couvertes.
Jaune : branches non couvertes.
Documentation complète d'Istanbul ici:
https://istanbul.js.org
Pour une théorie plus approfondie sur la couverture du code:
https://en.wikipedia.org/wiki/Code_coverage
J'espère que ça aide!
la source
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 instructions (qui seront généralement proches les unes des autres, sauf si vous avez de très longues instructions). Les branches signifient des points de décision comme des
if-else
blocs. Par exemple, supposons que votre code ne contienne qu'une seuleif-else
instruction et que vos tests ne passent que par laif
pièce mais pas par laelse
pièce, alors le pourcentage de vos branches doit être de 50%.J'espère que cela rend les choses plus claires.
la source
"test" : "nyc mocha"
danspackage.json
. Mon dossier de couverture est vide. Pensées?"test" : "nyc --reporter=html mocha"
Ajout aux réponses précédentes
Le pourcentage d'énoncés est calculé en prenant un pourcentage du nombre d'énoncés couverts par votre test, par exemple 12/18 * 100 = 66,67%. Cela signifie que votre test n'a couvert que 66,67%.
Le% Branch est également calculé de la même manière. Idem pour vos% Functions et% lines.
Dans le répertoire racine de votre projet, il y a un dossier de couverture qui contient la sortie HTML de votre test. Cliquez dessus et visualisez-le dans le navigateur. Vous devriez voir quelque chose comme ça
Image montrant la sortie de vos résultats de test
J'espère que cela vous aidera à mieux le comprendre.
la source