Generátory zpráv
Vitest nabízí několik vestavěných generátorů zpráv pro zobrazení výsledků testů v různých formátech a zároveň umožňuje použití vlastních generátorů. Různé generátory zpráv lze vybrat buď pomocí volby příkazového řádku --reporter, nebo definováním vlastnosti reporters ve vašem konfiguračním souboru. Pokud není zadán žádný generátor zpráv, Vitest použije výchozí generátor default, jak je popsáno níže.
Použití generátorů zpráv přes příkazový řádek:
npx vitest --reporter=verbosePoužití generátorů zpráv přes vitest.config.ts:
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
reporters: ['verbose'],
},
});Některé generátory zpráv lze přizpůsobit pomocí dodatečných voleb. Volby specifické pro jednotlivé generátory zpráv jsou popsány v následujících sekcích.
export default defineConfig({
test: {
reporters: ['default', ['junit', { suiteName: 'UI tests' }]],
},
});Výstup generátoru zpráv
Ve výchozím nastavení budou generátory zpráv Vitestu tisknout svůj výstup do terminálu. Při použití generátorů zpráv json, html nebo junit můžete výstup testů místo do terminálu zapsat do souboru. Toho docílíte definováním konfigurační možnosti outputFile buď ve vašem konfiguračním souboru Vite, nebo přes CLI.
npx vitest --reporter=json --outputFile=./test-output.jsonexport default defineConfig({
test: {
reporters: ['json'],
outputFile: './test-output.json',
},
});Kombinování generátorů zpráv
Můžete použít více generátorů zpráv současně k zobrazení výsledků testů v různých formátech. Například:
npx vitest --reporter=json --reporter=defaultexport default defineConfig({
test: {
reporters: ['json', 'default'],
outputFile: './test-output.json',
},
});Výše uvedený příklad zobrazí výsledky testů v terminálu ve výchozím stylu a zároveň je zapíše ve formátu JSON do určeného výstupního souboru.
Při použití více generátorů zpráv je také možné specifikovat více výstupních souborů, a to následovně:
export default defineConfig({
test: {
reporters: ['junit', 'json', 'verbose'],
outputFile: {
junit: './junit-report.xml',
json: './json-report.json',
},
},
});Tento příklad zapíše samostatné JSON a XML zprávy a zároveň zobrazí podrobnou zprávu v terminálu.
Vestavěné generátory zpráv
Výchozí generátor zpráv
Ve výchozím nastavení (tj. pokud není zadán žádný generátor zpráv) Vitest zobrazí souhrn spuštěných testů a jejich stav v dolní části. Jakmile sada testů projde, její stav bude zobrazen v horní části souhrnu.
Souhrn můžete zakázat konfigurací generátoru zpráv:
export default defineConfig({
test: {
reporters: [['default', { summary: false }]],
},
});Příklad výstupu pro probíhající testy:
✓ 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.00sKonečný výstup po dokončení testů:
✓ 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)Základní generátor zpráv
Reportér basic je ekvivalentní reportéru default bez summary.
npx vitest --reporter=basicexport default defineConfig({
test: {
reporters: ['basic'],
},
});Příklad výstupu s použitím základního generátoru zpráv:
✓ __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)Podrobný generátor zpráv
Podrobný generátor zpráv je stejný jako výchozí generátor zpráv default, ale navíc zobrazuje každý jednotlivý test po dokončení sady. Dále zobrazuje testy, které aktuálně běží a jejichž doba trvání přesahuje slowTestThreshold. Podobně jako u výchozího generátoru zpráv default můžete zakázat souhrn konfigurací generátoru zpráv.
npx vitest --reporter=verboseexport default defineConfig({
test: {
reporters: [['verbose', { summary: false }]],
},
});Příklad výstupu pro probíhající testy s výchozí hodnotou 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.00sPříklad konečného výstupu terminálu pro úspěšnou sadu testů:
✓ __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)Tečkový generátor zpráv
Zobrazí jednu tečku pro každý dokončený test, čímž poskytuje minimální výstup a zároveň ukazuje všechny spuštěné testy. Podrobnosti jsou poskytovány pouze pro neúspěšné testy, a to společně se souhrnem základního generátoru zpráv pro danou sadu.
npx vitest --reporter=dotexport default defineConfig({
test: {
reporters: ['dot'],
},
});Příklad výstupu terminálu pro úspěšnou sadu testů:
....
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 generátor zpráv
Generuje zprávu o výsledcích testů ve formátu JUnit XML. Může být zobrazena v terminálu nebo zapsána do souboru XML pomocí konfigurační možnosti outputFile.
npx vitest --reporter=junitexport default defineConfig({
test: {
reporters: ['junit'],
},
});Příklad JUnit XML reportu:
<?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>Vygenerovaný XML soubor obsahuje vnořené značky testsuites a testcase. Tyto značky lze také přizpůsobit pomocí voleb generátoru zpráv suiteName a classnameTemplate. classnameTemplate může být buď řetězec šablony, nebo funkce.
Podporované zástupné symboly pro možnost classnameTemplate jsou:
- filename
- filepath
export default defineConfig({
test: {
reporters: [
[
'junit',
{
suiteName: 'custom suite name',
classnameTemplate: 'filename:{filename} - filepath:{filepath}',
},
],
],
},
});JSON generátor zpráv
Generuje zprávu o výsledcích testů ve formátu JSON, který je kompatibilní s volbou Jest --json. Může být zobrazena v terminálu nebo zapsána do souboru pomocí konfigurační možnosti outputFile.
npx vitest --reporter=jsonexport default defineConfig({
test: {
reporters: ['json'],
},
});Příklad JSON reportu:
{
"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
Od Vitestu 3, pokud je povoleno pokrytí, JSON generátor zpráv zahrnuje informace o pokrytí v coverageMap.
HTML generátor zpráv
Generuje HTML soubor pro zobrazení výsledků testů prostřednictvím interaktivního GUI. Po vygenerování souboru Vitest spustí lokální vývojový server a poskytne odkaz pro zobrazení zprávy v prohlížeči.
Výstupní soubor lze určit pomocí konfigurační možnosti outputFile. Pokud není volba outputFile zadána, bude vytvořen nový HTML soubor.
npx vitest --reporter=htmlexport default defineConfig({
test: {
reporters: ['html'],
},
});TIP
Tento generátor zpráv vyžaduje nainstalovaný balíček @vitest/ui.
TAP generátor zpráv
Generuje zprávu ve formátu Test Anything Protocol (TAP).
npx vitest --reporter=tapexport default defineConfig({
test: {
reporters: ['tap'],
},
});Příklad TAP reportu:
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 generátor zpráv
Vypíše TAP flat report. Podobně jako u generátoru zpráv tap jsou výsledky testů formátovány podle standardů TAP, ale sady testů jsou formátovány jako plochý seznam namísto vnořené hierarchie.
npx vitest --reporter=tap-flatexport default defineConfig({
test: {
reporters: ['tap-flat'],
},
});Příklad TAP flat reportu:
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.00msGenerátor zpráv o visících procesech
Zobrazí seznam visících procesů, pokud nějaké brání Vitestu v bezpečném ukončení. Generátor zpráv hanging-process sám o sobě nezobrazuje výsledky testů, ale může být použit ve spojení s jiným generátorem zpráv k monitorování procesů během běhu testů. Použití tohoto generátoru zpráv může být náročné na zdroje, a proto by mělo být obecně vyhrazeno pro účely ladění v situacích, kdy Vitest důsledně nemůže ukončit proces.
npx vitest --reporter=hanging-processexport default defineConfig({
test: {
reporters: ['hanging-process'],
},
});Github Actions Generátor zpráv
Generuje příkazy pracovního postupu pro poskytnutí anotací pro selhání testů. Tento generátor zpráv je automaticky povolen společně s výchozím generátorem zpráv default, když process.env.GITHUB_ACTIONS === 'true'.
Pokud konfigurujete jiné než výchozí generátory zpráv, musíte explicitně přidat github-actions.
export default defineConfig({
test: {
reporters: process.env.GITHUB_ACTIONS ? ['dot', 'github-actions'] : ['dot'],
},
});Cesty k souborům, které jsou zobrazeny ve formátu příkazů anotací GitHubu, můžete přizpůsobit pomocí možnosti onWritePath. To je užitečné při spouštění Vitestu v kontejnerizovaném prostředí (např. Docker), kde se cesty k souborům nemusí shodovat s cestami v prostředí GitHub Actions.
export default defineConfig({
test: {
reporters: process.env.GITHUB_ACTIONS
? [
'default',
[
'github-actions',
{
onWritePath(path) {
return path.replace(
/^\/app\//,
`${process.env.GITHUB_WORKSPACE}/`
);
},
},
],
]
: ['default'],
},
});Blob Generátor zpráv
Ukládá výsledky testů lokálně, aby je bylo možné později sloučit pomocí příkazu --merge-reports. Ve výchozím nastavení ukládá všechny výsledky do složky .vitest-reports, ale toto chování lze přepsat pomocí příznaků --outputFile nebo --outputFile.blob.
npx vitest --reporter=blob --outputFile=reports/blob-1.jsonDoporučujeme použít tento generátor zpráv, pokud spouštíte Vitest na více strojích s příznakem --shard. Všechny blob zprávy lze sloučit do jakékoli jiné zprávy pomocí příkazu --merge-reports na konci vašeho CI pipeline:
npx vitest --merge-reports=reports --reporter=json --reporter=defaultTIP
Volby --reporter=blob i --merge-reports nefungují v režimu sledování (watch mode).
Vlastní generátory zpráv
Můžete použít vlastní generátory zpráv třetích stran nainstalované z NPM zadáním jejich názvu balíčku ve volbě generátorů zpráv:
npx vitest --reporter=some-published-vitest-reporterexport default defineConfig({
test: {
reporters: ['some-published-vitest-reporter'],
},
});Kromě toho můžete definovat své vlastní generátory zpráv a použít je zadáním jejich cesty k souboru:
npx vitest --reporter=./path/to/reporter.tsVlastní generátory zpráv by měly implementovat rozhraní Reporter.