Codeabdeckung für Jest

131

Gibt es eine Möglichkeit, Codeabdeckung im Javascript Jest-Testframework zu erzielen, das auf Jasmine basiert?

Der interne Rahmen nicht gedruckt werden, um die Code - Coverage wird es. Ich habe auch versucht, Istanbul , Blanket und JSCover zu verwenden , aber keiner von ihnen funktioniert.

Alex Palcuie
quelle
Ich bin nicht sehr scherzhaft, aber haben Sie config.collectCoverage gesehen ?
Ciro Costa

Antworten:

123

Bei Verwendung von Jest 21.2.1 kann ich die Codeabdeckung in der Befehlszeile anzeigen und ein Abdeckungsverzeichnis erstellen, indem ich es --coveragean das Jest-Skript übergebe. Nachfolgend einige Beispiele:

Ich neige dazu, Jest lokal zu installieren. In diesem Fall könnte der Befehl folgendermaßen aussehen:

npx jest --coverage

Ich gehe davon aus (obwohl nicht bestätigt), dass dies auch funktionieren würde, wenn ich Jest global installieren würde:

jest --coverage

Die sehr spärlichen Dokumente sind hier

Als ich in das Coverage / lcov-report- Verzeichnis navigierte, fand ich eine index.html- Datei, die in einen Browser geladen werden konnte. Es enthielt die in der Befehlszeile gedruckten Informationen sowie zusätzliche Informationen und einige grafische Ausgaben.

ccalvert
quelle
6
Verwenden Sie niemals globale Module. Verwenden Sie immer die ausführbare Datei in node_modulesvia, um die Versionskonsistenz und die Paketpräsenz sicherzustellen ./node_modules/.bin/jest --coverage. Solange das Paket in package.json benannt ist, können Sie die Ausführung mit der genauen Version von jest garantieren, die Sie erwarten.
Taystack
Wie bekomme ich eine Scherzabdeckung nur für geänderte Dateien?
Shanika Ediriweera
Gibt es eine einfache Möglichkeit, Tests nicht zu bestehen, wenn die Abdeckung unter einem bestimmten Grenzwert liegt? Entsprechende SO-Frage: stackoverflow.com/questions/60512167/…
Stefan
@ShanikaEdiriweera jestjs.io/docs/en/cli.html#--collectcoveragefromglob
marcellothearcane
88

UPDATE: 20.07.2008 - Links und aktualisierter Name für CoverageReporter hinzugefügt.

UPDATE: 14.08.2017 - Diese Antwort ist völlig veraltet. Schauen Sie sich jetzt die Jest-Dokumente an. Sie haben offizielle Unterstützung und Dokumentation dazu.

@hankhsiao hat ein gegabeltes Repo, in dem Istanbul mit Jest zusammenarbeitet. Fügen Sie dies Ihren Entwicklungsabhängigkeiten hinzu

 "devDependencies": {
     "jest-cli": "git://github.com/hankhsiao/jest.git"
 }

Stellen Sie außerdem sicher, dass die Abdeckung in Ihrem package.json-Scherzeintrag aktiviert ist, und Sie können auch die gewünschten Formate angeben. (Das HTML ist ziemlich schlechter Arsch).

 "jest": {
     "collectCoverage": true,
     "coverageReporters": ["json", "html"],
 }

Informationen zur Berichterstattung finden Sie in der Jest-Dokumentation (Standard ist ["json", "lcov", "text"])

Oder fügen --coverageSie hinzu, wenn Sie einen Scherz aufrufen.

Adrian Adkison
quelle
1
Die Option "CoverageFormats" wurde entfernt. Es sieht so aus, als würden jedes Mal sowohl json als auch html generiert.
1
Ich benutze die Option --coverage, aber es passiert absolut nichts anderes.
Gbbr
3
Es heißt (jetzt) coverageReportersund die Standardeinstellung ist ["json", "lcov", "text"]. Siehe facebook.github.io/jest/docs/…
Karsten S.
funktioniert nicht, Unbekannte Option "CoverageFormats" mit dem Wert ["json", "html"] wurde gefunden.
Srghma
40

Jan 2019: Scherzversion 23.6

Für alle, die sich in letzter Zeit mit dieser Frage befassen, insbesondere wenn sie mit npmoder yarndirekt testen

Derzeit müssen Sie die Konfigurationsoptionen nicht ändern

Auf der offiziellen Website von jest können Sie Folgendes tun, um Berichterstattungsberichte zu erstellen:

1- Für npm:

Sie müssen --vor dem Bestehen --coveragedes Scherzarguments setzen

npm test -- --coverage

Wenn Sie versuchen, das --coveragedirekt ohne das aufzurufen, --funktioniert es nicht

2- Für Garn:

Sie können das --coverageArgument des Scherzes direkt übergeben

yarn test --coverage
Ahmed Elkoussy
quelle
1
Wie bekomme ich eine Scherzabdeckung nur für geänderte Dateien?
Shanika Ediriweera
Seit wann geändert? Sie möchten wahrscheinlich die --watchEinstellung dafür verwenden.
Koehn
1
Diese Antwort macht viele Annahmen über den Zustand von denen package.json.
Airtonix
6

Okay, ignoriere meine vorherige Antwort, da mir jemand gesagt hat, dass das Problem dadurch nicht behoben wurde.

Neue Antwort:

1) Überprüfen Sie den neuesten Scherz (v 0.22): https://github.com/facebook/jest

2) Das Facebook-Team nimmt Istanbul als Teil des Berichterstattungsberichts auf und Sie können es direkt verwenden.

3) Nach dem Ausführen von jest können Sie einen Coverage-Bericht auf der Konsole abrufen. Unter dem von jest festgelegten Stammordner finden Sie den Coverage-Bericht im JSON- und HTML-Format.

4) Zu Ihrer Information: Wenn Sie von npm installieren, erhalten Sie möglicherweise nicht die neueste Version. Probieren Sie also zuerst den Github aus und stellen Sie sicher, dass die Abdeckung Ihren Anforderungen entspricht.


Alte Antwort:

Habe das gleiche Problem auch. Kurze Antwort lautet: Istanbulund Jestarbeiten NICHT zusammen.

Weitere Informationen finden Sie auf den folgenden Seiten:

https://github.com/facebook/jest/issues/101

jest verwendet contextify, das JS-Skripte in einem V8-Kontext in nativem Code ausführt, wodurch alle erforderlichen Istanbul- und vm.runInThisContext-Hooks umgangen werden. Das Istanbul-Cover funktioniert also nicht, da die Standardfunktionen von hookable node.js nicht verwendet werden und das Vorinstrumentieren von Dateien ebenfalls nicht hilft, da jeder Test in einer eigenen Sandbox ausgeführt wird und es kein globales Verzeichnis für das Coverage-Objekt gibt.

@Ciro Costa: Das config.collectCoveragefunktioniert NICHT, da es eine 'TODO'-Funktion ist. Bitte überprüfen Sie den Quellcode.

Winter
quelle
Die Frage war, wie man Code-Abdeckung für Jest erhält. Dass Istanbul und Jest nicht zusammenarbeiten, mag wahr sein, aber das beantwortet die Frage nicht.
David Raab
0

Wenn Sie Probleme mit --coverage haben, funktioniert dies möglicherweise auch daran, dass CoverageReporter aktiviert ist, ohne dass 'Text' oder 'Textzusammenfassung' hinzugefügt wurde. Aus den Dokumenten: "Hinweis: Durch Festlegen dieser Option werden die Standardwerte überschrieben. Fügen Sie" Text "oder" Textzusammenfassung "hinzu, um eine Abdeckungszusammenfassung in der Konsolenausgabe anzuzeigen." Quelle

thebkr7
quelle
0

Konfigurieren Sie Ihre package.json-Datei

"test": "scherz - coverage",

Geben Sie hier die Bildbeschreibung ein

Führen Sie nun Folgendes aus:

yarn test

Der gesamte Test wird ausgeführt und Sie erhalten den Bericht. Geben Sie hier die Bildbeschreibung ein

Saif Siddiqui
quelle
-1

Ich hatte das gleiche Problem und habe es wie unten behoben.

  1. Garn einlegen npm install --save-dev yarn
  2. installiere jest-cli npm install --save-dev jest-cli
  3. Fügen Sie dies der package.json hinzu "jest-coverage": "yarn run jest -- --coverage"

Nachdem Sie die Tests geschrieben haben, führen Sie den Befehl npm run jest-cover aus. Dadurch wird ein Abdeckungsordner im Stammverzeichnis erstellt. /coverage/icov-report/index.html bietet die HTML-Ansicht der Codeabdeckung.

Viel Spaß beim Codieren!

Laksh
quelle
8
Es ist nicht erforderlich, Garn zu installieren. Garn ist nur ein anderer Paketmanager als NPM
Schwarz
-10

Versuchen Sie es mit Chutzpah . Ich habe es gerade benutzt. Und ich habe darüber gebloggt, wie man sich in Visual Studio integriert.

So habe ich mit Chutzpah Code-Coverage durchgeführt: http://francorobles.wordpress.com/2014/09/14/code-coverage-with-chutzpah/

Francorobles
quelle
Chutzpath ist auf Blanket aufgebaut und ich habe oben angegeben, dass Jest nicht damit funktioniert.
Alex Palcuie
Interessant, weil meine gerade funktioniert hat. francorobles.wordpress.com/2014/09/14/…
francorobles
1
Sie verwenden nicht Jest, der standardmäßig alle verspottet require.
Alex Palcuie