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=verbose
Použ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.json
export 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=default
export 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.00s
Koneč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=basic
export 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=verbose
export 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.00s
Pří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=dot
export 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=junit
export 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=json
export 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=html
export 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=tap
export 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-flat
export 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.00ms
Generá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-process
export 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.json
Doporuč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=default
TIP
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-reporter
export 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.ts
Vlastní generátory zpráv by měly implementovat rozhraní Reporter.