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=verbose
Reporterek használata a vitest.config.ts
fájlban:
import { defineConfig } from 'vitest/config';
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.
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.json
export 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=default
export 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({
test: {
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 1
Vé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=basic
export 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=verbose
export 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=dot
export 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=junit
export 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 beágyazott testsuites
és testcase
címkéket tartalmaz. Ezeket az attribútumokat a riporter beállításokkal konfigurálhatja:
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=json
export default defineConfig({
test: {
reporters: ['json'],
},
});
Példa egy JSON riportra:
{
"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"
}
]
}
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=html
export 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=tap
export 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-flat
export 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.00ms
Fü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-process
export default defineConfig({
test: {
reporters: ['hanging-process'],
},
});
GitHub Actions reporter
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'],
},
});
Blob Reporter
Tárolja a teszteredményeket a gépen, így később összevonhatók a --merge-reports
paranccsal. Alapértelmezés szerint minden eredményt a .vitest-reports
mappába tárol, de ezt felülírhatja a --outputFile
vagy --outputFile.blob
zászlókkal.
npx vitest --reporter=blob --outputFile=reports/blob-1.json
Javasoljuk ennek a riportnak a használatát, ha a Vitestet különböző gépeken futtatja a --shard
zászlóval. Az összes blob riport összevonható bármely riportba a --merge-reports
parancs használatával a CI folyamat végén:
npx vitest --merge-reports=reports --reporter=json --reporter=default
TIP
Mind a --reporter=blob
, mind a --merge-reports
nem működik watch
módban.
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-reporter
export 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.ts
Az egyéni reportereknek meg kell felelniük a Reporter interfésznek.