Ich habe Jasmine immer für meine Unit-Tests verwendet, aber seit kurzem benutze ich Istanbul, um mir Berichte zur Codeabdeckung zu geben. Ich meine, ich verstehe, was sie mir zu sagen versuchen, aber ich weiß nicht wirklich, was jeder dieser Prozentsätze darstellt (Stmts, Branches, Funcs, Lines). Bisher konnte ich beim Googeln keine solide Erklärung / Ressource finden.
Frage : Wie gesagt, ich verstehe das Wesentliche, aber kann jemand entweder eine richtige Erklärung oder einen Link zu einer richtigen Erklärung posten?
Tertiäre Frage : Gibt es eine Möglichkeit festzustellen, welche spezifischen Teile Ihres Codes nicht abgedeckt sind? Bisher, ohne diesen Bericht wirklich zu kritisieren, schätze ich im Grunde.
-------------------|-----------|-----------|-----------|-----------|
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 |
-------------------|-----------|-----------|-----------|-----------|
javascript
testing
jasmine
code-coverage
istanbul
Scott Schwert
quelle
quelle
Antworten:
Es gibt eine Reihe von Abdeckungskriterien, die wichtigsten sind:
In jedem Fall stellt der Prozentsatz den ausgeführten Code gegenüber dem nicht ausgeführten Code dar , der jedem Bruch im Prozentformat entspricht (z. B. 50% Verzweigungen, 1/2).
Im Dateibericht:
'E'
steht für 'sonst Pfad nicht genommen', was bedeutet, dass für die markierte if / else-Anweisung der 'if'-Pfad getestet wurde, nicht jedoch der' else '.'I'
steht für "wenn der Weg nicht genommen wird", was der umgekehrte Fall ist: das "wenn" wurde nicht getestet.xN
linke Spalte gibt an, wie oft diese Zeile ausgeführt wurde.Dies wurde für Istanbul v0.4.0 überprüft. Ich bin mir nicht sicher, ob dies für nachfolgende Versionen noch gilt. Da die Bibliothek jedoch auf soliden theoretischen Prinzipien basiert, sollte sich das Verhalten für neuere Versionen nicht zu stark ändern.
Es bietet auch einige Farbcodes -
Pink : Aussagen nicht abgedeckt.
Orange : Funktionen nicht abgedeckt.
Gelb : Zweige nicht bedeckt.
Vollständige Istanbul-Dokumente hier:
https://istanbul.js.org
Für eine detailliertere Theorie zur Codeabdeckung:
https://en.wikipedia.org/wiki/Code_coverage
Ich hoffe es hilft!
quelle
Wenn Sie Istanbul ausführen, sollte auch eine HTML-Datei für den Bericht erstellt werden (sollte sich im Coverage-Ordner befinden). Dieser HTML-Code sollte Ihnen Drilldown-Informationen geben, wenn Sie auf Dateien / Ordner klicken.
Der Prozentsatz der abgedeckten Funktionen wird durch die Anzahl der Funktionen berechnet, die während der Tests aufgerufen wurden, geteilt durch die Gesamtzahl der Funktionen. Gleiches gilt für Zeilen und Anweisungen (die normalerweise nahe beieinander liegen, es sei denn, Sie haben sehr lange Anweisungen). Zweige bedeuten Entscheidungspunkte wie
if-else
Blöcke. Angenommen, Ihr Code enthält nur eineif-else
Anweisung, und Ihre Tests durchlaufen nur dasif
Teil, nicht jedoch daselse
Teil. Dann sollte der Prozentsatz Ihrer Zweige 50% betragen.Hoffe das macht die Dinge klarer.
quelle
"test" : "nyc mocha"
inpackage.json
. Mein Coverage-Ordner ist leer. Gedanken?"test" : "nyc --reporter=html mocha"
Hinzufügen zu den vorherigen Antworten
Die% -Anweisungen werden berechnet, indem ein Prozentsatz der Anzahl der von Ihrem Test abgedeckten Anweisungen verwendet wird, z. B. 12/18 * 100 = 66,67%. Dies bedeutet, dass Ihr Test nur 66,67% abdeckte.
Auf die gleiche Weise wird auch der% -Zweig berechnet. Gleiches gilt für Ihre% Funktionen und% Zeilen.
In Ihrem Projektstammverzeichnis befindet sich ein Coverage-Ordner, der die HTML-Ausgabe Ihres Tests enthält. Klicken Sie darauf und zeigen Sie es im Browser an. Sie sollten so etwas sehen
Bild zeigt die Ausgabe Ihrer Testergebnisse
Ich hoffe, das hilft Ihnen, es besser zu verstehen.
quelle