Reporterek
A Vitest számos beépített reportert kínál a tesztek kimenetének különböző formátumokban történő megjelenítéséhez. Emellett lehetőséget biztosít egyéni reporterek használatára is. A --reporter parancssori opcióval vagy a reporters tulajdonság megadásával választhatsz különböző reportereket a konfigurációs fájlban. Ha nincs megadva reporter, a Vitest az alább leírt alapértelmezett reportert fogja használni.
Reporterek használata a parancssorból:
npx vitest --reporter=verboseReporterek használata a vitest.config.ts fájlban:
/// <reference types="vitest" />
import { defineConfig } from 'vite';
export default defineConfig({
test: {
reporters: ['verbose'],
},
});Néhány reporter testreszabható további opciók átadásával. Az alábbi szakaszokban ismertetjük a reporter-specifikus opciókat.
TIP
Vitest v1.3.0 óta.
export default defineConfig({
test: {
reporters: ['default', ['junit', { suiteName: 'UI tests' }]],
},
});Reporter kimenet
Alapértelmezés szerint a Vitest reporterei a terminálra írják a kimenetüket. A json, html vagy junit reporterek használatakor a tesztek kimenetét fájlba is irányíthatod. Ehhez meg kell adnod egy outputFile konfigurációs opciót a Vite konfigurációs fájljában vagy a CLI-ben.
npx vitest --reporter=json --outputFile=./test-output.jsonexport default defineConfig({
test: {
reporters: ['json'],
outputFile: './test-output.json',
},
});Reporterek kombinálása
A teszteredmények különböző formátumokban történő megjelenítéséhez több reportert is használhatsz egyszerre. Például:
npx vitest --reporter=json --reporter=defaultexport default defineConfig({
test: {
reporters: ['json', 'default'],
outputFile: './test-output.json',
},
});A fenti példa a teszteredményeket a terminálra nyomtatja az alapértelmezett stílusban, és JSON formátumban kiírja a megadott kimeneti fájlba.
Több reporter használata esetén több kimeneti fájlt is megadhatsz az alábbiak szerint:
export default defineConfig({
reporters: ['junit', 'json', 'verbose'],
outputFile: {
junit: './junit-report.xml',
json: './json-report.json',
},
});Ez a példa külön JSON és XML riportokat generál, valamint egy részletes riportot jelenít meg a terminálon.
Beépített reporterek
Alapértelmezett reporter
Alapértelmezés szerint (azaz, ha nincs megadva reporter), a Vitest futás közben hierarchikusan jeleníti meg az egyes tesztcsomagok eredményeit. A sikeresen lefutott csomagokat ezután összecsukja. Amikor az összes teszt befejeződött, a végső terminálkimenet összefoglalja az eredményeket és a sikertelen tesztek részleteit.
Példa a folyamatban lévő tesztek kimenetére:
✓ __tests__/file1.test.ts (2) 725ms
✓ __tests__/file2.test.ts (5) 746ms
✓ second test file (2) 746ms
✓ 1 + 1 should equal 2
✓ 2 - 1 should equal 1Végső kimenet a tesztek befejezése után:
✓ __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)Egyszerű reporter
A basic reporter a teljes csomag futásának befejezése után jeleníti meg a futtatott tesztfájlokat és az eredmények összefoglalóját. A riport csak a sikertelen teszteket tartalmazza.
npx vitest --reporter=basicexport default defineConfig({
test: {
reporters: ['basic'],
},
});Példa az egyszerű reporter használatával kapott kimenetre:
✓ __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)Részletes reporter
Ugyanazt a hierarchikus struktúrát követi, mint az alapértelmezett reporter, de nem csukja össze az al-fákat a sikeres tesztcsomagok esetében. A végső terminálkimenet az összes futtatott tesztet megjeleníti, beleértve a sikereseket is.
npx vitest --reporter=verboseexport default defineConfig({
test: {
reporters: ['verbose'],
},
});Példa egy sikeres tesztcsomag végső terminálkimenetére:
✓ __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)Pont reporter
Minden befejezett teszthez egyetlen pontot nyomtat ki, hogy minimális kimenetet biztosítson, miközben továbbra is megjeleníti az összes futtatott tesztet. A részletek csak a sikertelen tesztekhez kerülnek megadásra, a csomaghoz tartozó basic reporter összefoglalójával együtt.
npx vitest --reporter=dotexport default defineConfig({
test: {
reporters: ['dot'],
},
});Példa egy sikeres tesztcsomag terminálkimenetére:
....
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
A teszteredményekről JUnit XML formátumban készít riportot. A terminálra írható, vagy kiírható egy XML fájlba az outputFile konfigurációs opcióval.
npx vitest --reporter=junitexport default defineConfig({
test: {
reporters: ['junit'],
},
});Példa egy JUnit XML riportra:
<?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>A kimeneti XML testsuites és testcase elemeket tartalmaz, egymásba ágyazva. A name és classname attribútumok a VITEST_JUNIT_SUITE_NAME és VITEST_JUNIT_CLASSNAME környezeti változókkal konfigurálhatók. Ezek a riport opciókon keresztül is testreszabhatók:
export default defineConfig({
test: {
reporters: [
[
'junit',
{ suiteName: 'custom suite name', classname: 'custom-classname' },
],
],
},
});JSON reporter
A teszteredményekről JSON formátumban készít riportot. A terminálra írható, vagy kiírható egy fájlba az outputFile konfigurációs opcióval.
npx vitest --reporter=jsonexport default defineConfig({
test: {
reporters: ['json'],
},
});Példa egy JSON riportra:
{
"numTotalTestSuites": 1,
"numPassedTestSuites": 0,
"numFailedTestSuites": 1,
"numPendingTestSuites": 0,
"numTotalTests": 1,
"numPassedTests": 0,
"numFailedTests": 1,
"numPendingTests": 0,
"numTodoTests": 0,
"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
}
}
],
"startTime": 1697737019787,
"endTime": 1697737019797,
"status": "failed",
"message": "",
"name": "/root-directory/__tests__/test-file-1.test.ts"
}
]
}HTML reporter
HTML fájlt generál a teszteredmények interaktív GUI felületen történő megtekintéséhez. A fájl generálása után a Vitest futtat egy helyi fejlesztői szervert, és linket biztosít a riport böngészőben történő megtekintéséhez.
A kimeneti fájl az outputFile konfigurációs opcióval adható meg. Ha nincs megadva outputFile opció, akkor egy új HTML fájl jön létre.
npx vitest --reporter=htmlexport default defineConfig({
test: {
reporters: ['html'],
},
});TIP
Ehhez telepíteni kell a @vitest/ui csomagot.
TAP reporter
A Test Anything Protocol (TAP) protokollt követő riportot ad ki.
npx vitest --reporter=tapexport default defineConfig({
test: {
reporters: ['tap'],
},
});Példa egy TAP riportra:
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
A tap riporthoz hasonlóan a teszteredmények a TAP szabványoknak megfelelően vannak formázva. A tesztcsomagok azonban lapos listaként jelennek meg, nem pedig egymásba ágyazott hierarchiaként.
npx vitest --reporter=tap-flatexport default defineConfig({
test: {
reporters: ['tap-flat'],
},
});Példa egy TAP flat riportra:
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.00msFüggő folyamatokat jelző reporter
A függő folyamatokat jelző reporter önmagában nem jeleníti meg a teszteredményeket, de egy másik reporterrel együtt használva figyelhetők a folyamatok a tesztek futása közben. Ennek a reporternek a használata erőforrásigényes lehet, ezért általában csak hibakeresésre javasolt, olyan esetekben, amikor a Vitest nem tud kilépni a folyamatból.
npx vitest --reporter=hanging-processexport default defineConfig({
test: {
reporters: ['hanging-process'],
},
});GitHub Actions reporter 1.3.0+
Kimeneti workflow parancsok a teszthibákhoz tartozó annotációk biztosításához. Ez a reporter automatikusan engedélyezve van egy default reporterrel, ha a process.env.GITHUB_ACTIONS === 'true'.
Ha nem alapértelmezett reportereket konfigurálsz, akkor explicit módon hozzá kell adnod a github-actions reportert.
export default defineConfig({
test: {
reporters: process.env.GITHUB_ACTIONS ? ['dot', 'github-actions'] : ['dot'],
},
});Egyéni reporterek
Ha megadod a csomag nevét a riportok opcióban, használhatsz harmadik féltől származó, NPM-ből telepített egyéni reportereket:
npx vitest --reporter=some-published-vitest-reporterexport default defineConfig({
test: {
reporters: ['some-published-vitest-reporter'],
},
});Saját egyéni reportereket is definiálhatsz, és használhatod őket a fájlútvonaluk megadásával:
npx vitest --reporter=./path/to/reporter.tsAz egyéni reportereknek meg kell felelniük a Reporter interfésznek.