Reporter
Vitest bietet mehrere integrierte Reporter, um Testergebnisse in verschiedenen Formaten darzustellen, sowie die Möglichkeit, benutzerdefinierte Reporter zu verwenden. Sie können verschiedene Reporter entweder über die Befehlszeilenoption --reporter oder durch die Angabe einer reporters-Eigenschaft in Ihrer Konfigurationsdatei auswählen. Wenn kein Reporter angegeben ist, verwendet Vitest den default-Reporter, wie unten beschrieben.
Verwendung von Reportern über die Befehlszeile:
npx vitest --reporter=verboseVerwendung von Reportern über vitest.config.ts:
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
reporters: ['verbose'],
},
});Einige Reporter lassen sich durch zusätzliche Optionen anpassen. Reporterspezifische Optionen werden in den Abschnitten unten beschrieben.
export default defineConfig({
test: {
reporters: ['default', ['junit', { suiteName: 'UI tests' }]],
},
});Reporter-Ausgabe
Standardmäßig geben die Reporter von Vitest ihre Ausgabe im Terminal aus. Bei Verwendung der Reporter json, html oder junit können Sie die Testergebnisse stattdessen in eine Datei schreiben, indem Sie die Konfigurationsoption outputFile entweder in Ihrer Vite-Konfigurationsdatei oder über die CLI festlegen.
npx vitest --reporter=json --outputFile=./test-output.jsonexport default defineConfig({
test: {
reporters: ['json'],
outputFile: './test-output.json',
},
});Reporter kombinieren
Sie können mehrere Reporter gleichzeitig nutzen, um Ihre Testergebnisse in unterschiedlichen Formaten auszugeben. Zum Beispiel:
npx vitest --reporter=json --reporter=defaultexport default defineConfig({
test: {
reporters: ['json', 'default'],
outputFile: './test-output.json',
},
});Das obige Beispiel gibt die Testergebnisse sowohl im Standardstil im Terminal aus als auch als JSON in die dafür vorgesehene Ausgabedatei schreibt.
Bei der Verwendung mehrerer Reporter ist es auch möglich, mehrere Ausgabedateien festzulegen, wie folgt:
export default defineConfig({
test: {
reporters: ['junit', 'json', 'verbose'],
outputFile: {
junit: './junit-report.xml',
json: './json-report.json',
},
},
});Dieses Beispiel schreibt separate JSON- und XML-Berichte und gibt einen ausführlichen Bericht im Terminal aus.
Integrierte Reporter
Standardreporter
Standardmäßig zeigt Vitest eine Zusammenfassung der laufenden Tests und deren Status am unteren Rand an, wenn kein Reporter angegeben ist. Sobald eine Suite abgeschlossen ist, wird ihr Status oben in der Zusammenfassung angezeigt.
Sie können die Zusammenfassung deaktivieren, indem Sie den Reporter konfigurieren:
export default defineConfig({
test: {
reporters: [['default', { summary: false }]],
},
});Beispielausgabe während der Tests:
✓ test/example-1.test.ts (5 tests | 1 skipped) 306ms
✓ test/example-2.test.ts (5 tests | 1 skipped) 307ms
❯ test/example-3.test.ts 3/5
❯ test/example-4.test.ts 1/5
Test Files 2 passed (4)
Tests 10 passed | 3 skipped (65)
Start at 11:01:36
Duration 2.00sEndgültige Ausgabe nach Abschluss der Tests:
✓ test/example-1.test.ts (5 tests | 1 skipped) 306ms
✓ test/example-2.test.ts (5 tests | 1 skipped) 307ms
✓ test/example-3.test.ts (5 tests | 1 skipped) 307ms
✓ test/example-4.test.ts (5 tests | 1 skipped) 307ms
Test Files 4 passed (4)
Tests 16 passed | 4 skipped (20)
Start at 12:34:32
Duration 1.26s (transform 35ms, setup 1ms, collect 90ms, tests 1.47s, environment 0ms, prepare 267ms)Basis-Reporter
Der basic-Reporter ist äquivalent zum default-Reporter ohne summary.
npx vitest --reporter=basicexport default defineConfig({
test: {
reporters: ['basic'],
},
});Beispielausgabe mit dem Basis-Reporter:
✓ __tests__/file1.test.ts (2) 725ms
✓ __tests__/file2.test.ts (2) 746ms
Test Files 2 passed (2)
Tests 4 passed (4)
Start at 12:34:32
Duration 1.26s (transform 35ms, setup 1ms, collect 90ms, tests 1.47s, environment 0ms, prepare 267ms)Ausführlicher Reporter
Der Ausführliche Reporter entspricht dem default-Reporter, zeigt aber auch jeden einzelnen Test an, nachdem die Suite abgeschlossen ist. Er zeigt auch aktuell laufende Tests an, die den slowTestThreshold überschreiten. Ähnlich wie beim default-Reporter können Sie die Zusammenfassung deaktivieren, indem Sie den Reporter konfigurieren.
npx vitest --reporter=verboseexport default defineConfig({
test: {
reporters: [['verbose', { summary: false }]],
},
});Beispielausgabe für laufende Tests mit dem Standardwert slowTestThreshold: 300:
✓ __tests__/example-1.test.ts (2) 725ms
✓ first test file (2) 725ms
✓ 2 + 2 should equal 4
✓ 4 - 2 should equal 2
❯ test/example-2.test.ts 3/5
↳ should run longer than three seconds 1.57s
❯ test/example-3.test.ts 1/5
Test Files 2 passed (4)
Tests 10 passed | 3 skipped (65)
Start at 11:01:36
Duration 2.00sBeispiel der finalen Terminalausgabe für eine bestandene Testsuite:
✓ __tests__/file1.test.ts (2) 725ms
✓ first test file (2) 725ms
✓ 2 + 2 should equal 4
✓ 4 - 2 should equal 2
✓ __tests__/file2.test.ts (2) 746ms
✓ second test file (2) 746ms
✓ 1 + 1 should equal 2
✓ 2 - 1 should equal 1
Test Files 2 passed (2)
Tests 4 passed (4)
Start at 12:34:32
Duration 1.26s (transform 35ms, setup 1ms, collect 90ms, tests 1.47s, environment 0ms, prepare 267ms)Punkt-Reporter
Gibt für jeden abgeschlossenen Test einen einzelnen Punkt aus, um eine minimale Ausgabe zu liefern, wobei dennoch alle ausgeführten Tests angezeigt werden. Details werden nur für fehlgeschlagene Tests bereitgestellt, zusammen mit der Zusammenfassung des basic-Reporters für die Suite.
npx vitest --reporter=dotexport default defineConfig({
test: {
reporters: ['dot'],
},
});Beispiel der Terminalausgabe für eine bestandene Testsuite:
....
Test Files 2 passed (2)
Tests 4 passed (4)
Start at 12:34:32
Duration 1.26s (transform 35ms, setup 1ms, collect 90ms, tests 1.47s, environment 0ms, prepare 267ms)JUnit Reporter
Gibt einen Bericht der Testergebnisse im JUnit-XML-Format aus. Kann entweder im Terminal ausgegeben oder mit der Konfigurationsoption outputFile in eine XML-Datei geschrieben werden.
npx vitest --reporter=junitexport default defineConfig({
test: {
reporters: ['junit'],
},
});Beispiel eines JUnit-XML-Berichts:
<?xml version="1.0" encoding="UTF-8" ?>
<testsuites name="vitest tests" tests="2" failures="1" errors="0" time="0.503">
<testsuite name="__tests__/test-file-1.test.ts" timestamp="2023-10-19T17:41:58.580Z" hostname="My-Computer.local" tests="2" failures="1" errors="0" skipped="0" time="0.013">
<testcase classname="__tests__/test-file-1.test.ts" name="first test file > 2 + 2 should equal 4" time="0.01">
<failure message="expected 5 to be 4 // Object.is equality" type="AssertionError">
AssertionError: expected 5 to be 4 // Object.is equality
❯ __tests__/test-file-1.test.ts:20:28
</failure>
</testcase>
<testcase classname="__tests__/test-file-1.test.ts" name="first test file > 4 - 2 should equal 2" time="0">
</testcase>
</testsuite>
</testsuites>Die generierte XML enthält verschachtelte testsuites- und testcase-Tags. Diese können auch über die Reporter-Optionen suiteName und classnameTemplate konfiguriert werden. classnameTemplate kann entweder ein Template-String oder eine Funktion sein.
Die unterstützten Platzhalter für die Option classnameTemplate sind:
- filename
- filepath
export default defineConfig({
test: {
reporters: [
[
'junit',
{
suiteName: 'custom suite name',
classnameTemplate: 'filename:{filename} - filepath:{filepath}',
},
],
],
},
});JSON Reporter
Generiert einen Bericht der Testergebnisse in einem JSON-Format, das mit Jests --json-Option kompatibel ist. Kann entweder im Terminal ausgegeben oder mit der Konfigurationsoption outputFile in eine Datei geschrieben werden.
npx vitest --reporter=jsonexport default defineConfig({
test: {
reporters: ['json'],
},
});Beispiel eines JSON-Berichts:
{
"numTotalTestSuites": 4,
"numPassedTestSuites": 2,
"numFailedTestSuites": 1,
"numPendingTestSuites": 1,
"numTotalTests": 4,
"numPassedTests": 1,
"numFailedTests": 1,
"numPendingTests": 1,
"numTodoTests": 1,
"startTime": 1697737019307,
"success": false,
"testResults": [
{
"assertionResults": [
{
"ancestorTitles": ["", "first test file"],
"fullName": " first test file 2 + 2 should equal 4",
"status": "failed",
"title": "2 + 2 should equal 4",
"duration": 9,
"failureMessages": ["expected 5 to be 4 // Object.is equality"],
"location": {
"line": 20,
"column": 28
},
"meta": {}
}
],
"startTime": 1697737019787,
"endTime": 1697737019797,
"status": "failed",
"message": "",
"name": "/root-directory/__tests__/test-file-1.test.ts"
}
],
"coverageMap": {}
}INFO
Seit Vitest 3 enthält der JSON-Reporter Abdeckungsinformationen in coverageMap, sofern die Abdeckung aktiviert ist.
HTML Reporter
Generiert eine HTML-Datei, um Testergebnisse über eine interaktive GUI anzuzeigen. Nachdem die Datei generiert wurde, startet Vitest einen lokalen Entwicklungsserver und stellt einen Link bereit, um den Bericht in einem Browser anzuzeigen.
Die Ausgabedatei kann mit der Konfigurationsoption outputFile angegeben werden. Wenn keine outputFile-Option angegeben ist, wird eine neue HTML-Datei erstellt.
npx vitest --reporter=htmlexport default defineConfig({
test: {
reporters: ['html'],
},
});TIP
Dieser Reporter benötigt das installierte Paket @vitest/ui.
TAP Reporter
Gibt einen Bericht gemäß dem Test Anything Protocol (TAP) aus.
npx vitest --reporter=tapexport default defineConfig({
test: {
reporters: ['tap'],
},
});Beispiel eines TAP-Berichts:
TAP version 13
1..1
not ok 1 - __tests__/test-file-1.test.ts # time=14.00ms {
1..1
not ok 1 - first test file # time=13.00ms {
1..2
not ok 1 - 2 + 2 should equal 4 # time=11.00ms
---
error:
name: "AssertionError"
message: "expected 5 to be 4 // Object.is equality"
at: "/root-directory/__tests__/test-file-1.test.ts:20:28"
actual: "5"
expected: "4"
...
ok 2 - 4 - 2 should equal 2 # time=1.00ms
}
}TAP Flat Reporter
Gibt einen TAP-Flat-Bericht aus. Wie der tap-Reporter werden die Testergebnisse gemäß den TAP-Standards formatiert, aber Testsuiten werden als flache Liste statt als verschachtelte Hierarchie formatiert.
npx vitest --reporter=tap-flatexport default defineConfig({
test: {
reporters: ['tap-flat'],
},
});Beispiel eines TAP-Flat-Berichts:
TAP version 13
1..2
not ok 1 - __tests__/test-file-1.test.ts > first test file > 2 + 2 should equal 4 # time=11.00ms
---
error:
name: "AssertionError"
message: "expected 5 to be 4 // Object.is equality"
at: "/root-directory/__tests__/test-file-1.test.ts:20:28"
actual: "5"
expected: "4"
...
ok 2 - __tests__/test-file-1.test.ts > first test file > 4 - 2 should equal 2 # time=0.00msHanging Process Reporter
Zeigt eine Liste der hängenden Prozesse an, falls diese Vitest am sicheren Beenden hindern. Der hanging-process-Reporter selbst zeigt keine Testergebnisse an, kann aber in Kombination mit einem anderen Reporter verwendet werden, um Prozesse während der Testausführung zu überwachen. Die Verwendung dieses Reporters kann ressourcenintensiv sein und sollte daher in der Regel für Debugging-Zwecke reserviert werden, wenn Vitest den Prozess nicht beenden kann.
npx vitest --reporter=hanging-processexport default defineConfig({
test: {
reporters: ['hanging-process'],
},
});Github Actions Reporter
Gibt Workflow-Befehle aus, um Testfehler mit Anmerkungen zu versehen. Dieser Reporter wird automatisch zusammen mit dem default-Reporter aktiviert, wenn process.env.GITHUB_ACTIONS === 'true'.
Wenn Sie andere Reporter als den Standardreporter konfigurieren, müssen Sie github-actions explizit hinzufügen.
export default defineConfig({
test: {
reporters: process.env.GITHUB_ACTIONS ? ['dot', 'github-actions'] : ['dot'],
},
});Sie können die Dateipfade, die im GitHub-Anmerkungsbefehlsformat ausgegeben werden, mithilfe der Option onWritePath anpassen. Dies ist nützlich, wenn Vitest in einer containerisierten Umgebung, wie z.B. Docker, ausgeführt wird, da die Dateipfade dort möglicherweise nicht mit den Pfaden in der GitHub Actions-Umgebung übereinstimmen.
export default defineConfig({
test: {
reporters: process.env.GITHUB_ACTIONS
? [
'default',
[
'github-actions',
{
onWritePath(path) {
return path.replace(
/^\/app\//,
`${process.env.GITHUB_WORKSPACE}/`
);
},
},
],
]
: ['default'],
},
});Blob Reporter
Speichert Testergebnisse lokal, sodass sie später mit dem Befehl --merge-reports zusammengeführt werden können. Standardmäßig werden alle Ergebnisse im Ordner .vitest-reports gespeichert, dies kann jedoch durch die Flags --outputFile oder --outputFile.blob überschrieben werden.
npx vitest --reporter=blob --outputFile=reports/blob-1.jsonWir empfehlen die Verwendung dieses Reporters, wenn Sie Vitest auf verschiedenen Maschinen unter Verwendung des Flags --shard ausführen. Alle Blob-Berichte können am Ende Ihrer CI-Pipeline mit dem Befehl --merge-reports zu einem einzigen Bericht zusammengeführt werden:
npx vitest --merge-reports=reports --reporter=json --reporter=defaultTIP
Sowohl --reporter=blob als auch --merge-reports sind im Watch-Modus nicht verfügbar.
Benutzerdefinierte Reporter
Sie können benutzerdefinierte Reporter von Drittanbietern, die über NPM installiert wurden, verwenden, indem Sie deren Paketnamen in der Reporter-Option angeben:
npx vitest --reporter=some-published-vitest-reporterexport default defineConfig({
test: {
reporters: ['some-published-vitest-reporter'],
},
});Zusätzlich können Sie Ihre eigenen benutzerdefinierten Reporter definieren und diese verwenden, indem Sie den Dateipfad angeben:
npx vitest --reporter=./path/to/reporter.tsBenutzerdefinierte Reporter müssen das Reporter-Interface implementieren.