Средства отчётности
Vitest предоставляет несколько встроенных средств отчётности для отображения результатов тестов в различных форматах, а также возможность использования пользовательских генераторов отчётов. Вы можете выбрать различные средства отчётности, используя опцию командной строки --reporter или включив свойство reporters в ваш файл конфигурации. Если средство отчётности не указано, Vitest будет использовать средство отчётности default, как описано ниже.
Использование средств отчётности через командную строку:
npx vitest --reporter=verboseИспользование средств отчётности через vitest.config.ts:
import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
reporters: ['verbose'],
},
});Некоторые средства отчётности можно настроить, передав им дополнительные опции. Опции, специфичные для средств отчётности, описаны в разделах ниже.
export default defineConfig({
test: {
reporters: ['default', ['junit', { suiteName: 'UI tests' }]],
},
});Вывод средств отчётности
По умолчанию средства отчётности Vitest выводят свои результаты в терминал. При использовании средств отчётности json, html или junit вы можете вместо этого записывать вывод ваших тестов в файл, включив опцию конфигурации outputFile либо в файл конфигурации Vite, либо через CLI.
npx vitest --reporter=json --outputFile=./test-output.jsonexport default defineConfig({
test: {
reporters: ['json'],
outputFile: './test-output.json',
},
});Комбинирование средств отчётности
Вы можете использовать несколько средств отчётности одновременно для вывода результатов тестов в различных форматах. Например:
npx vitest --reporter=json --reporter=defaultexport default defineConfig({
test: {
reporters: ['json', 'default'],
outputFile: './test-output.json',
},
});Приведенный выше пример будет выводить результаты тестов в терминал в стандартном стиле и одновременно записывать их в формате JSON в указанный выходной файл.
При использовании нескольких средств отчётности также возможно указать несколько выходных файлов, как показано ниже:
export default defineConfig({
test: {
reporters: ['junit', 'json', 'verbose'],
outputFile: {
junit: './junit-report.xml',
json: './json-report.json',
},
},
});Этот пример запишет отдельные отчеты JSON и XML и выведет подробный отчет в терминал.
Встроенные средства отчётности
Средство отчётности по умолчанию
По умолчанию (если средство отчётности не указано) Vitest будет отображать сводку запущенных тестов и их статус внизу. Когда набор тестов пройдет, его статус будет отображен в верхней части сводки.
Вы можете отключить сводку, настроив средство отчётности:
export default defineConfig({
test: {
reporters: [['default', { summary: false }]],
},
});Пример вывода для тестов в процессе выполнения:
✓ 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Окончательный вывод после завершения тестов:
✓ 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)Базовое средство отчётности
Средство отчётности basic аналогично средству отчётности default, но без summary.
npx vitest --reporter=basicexport default defineConfig({
test: {
reporters: ['basic'],
},
});Пример вывода для базового средства отчётности:
✓ __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)Подробное средство отчётности
Подробное средство отчётности аналогично средству отчётности default, но также отображает каждый отдельный тест после завершения набора тестов. Оно также отображает текущие запущенные тесты, превышающие slowTestThreshold. Подобно средству отчётности default, вы можете отключить сводку, настроив средство отчётности.
npx vitest --reporter=verboseexport default defineConfig({
test: {
reporters: [['verbose', { summary: false }]],
},
});Пример вывода для выполняющихся тестов с 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Пример окончательного вывода для успешно пройденного набора тестов:
✓ __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)Точечное средство отчётности
Выводит одну точку для каждого завершенного теста, обеспечивая минимальный вывод и показывая все выполненные тесты. Подробности предоставляются только для неудачных тестов, наряду со сводкой средства отчётности basic для набора тестов.
npx vitest --reporter=dotexport default defineConfig({
test: {
reporters: ['dot'],
},
});Пример вывода для успешно пройденного набора тестов:
....
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 Средство отчётности
Генерирует отчёт о результатах тестов в формате JUnit XML. Результаты могут быть выведены в терминал или записаны в XML-файл с помощью опции outputFile.
npx vitest --reporter=junitexport default defineConfig({
test: {
reporters: ['junit'],
},
});Пример отчета JUnit XML:
<?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>Сгенерированный XML содержит вложенные теги testsuites и testcase. Их также можно настроить с помощью опций средства отчётности suiteName и classnameTemplate. classnameTemplate может быть либо строкой шаблона, либо функцией.
Поддерживаемые заполнители для опции classnameTemplate:
- filename
- filepath
export default defineConfig({
test: {
reporters: [
[
'junit',
{
suiteName: 'custom suite name',
classnameTemplate: 'filename:{filename} - filepath:{filepath}',
},
],
],
},
});JSON Средство отчётности
Генерирует результаты тестов в формате JSON, совместимом с опцией --json Jest. Результаты могут быть выведены в терминал или записаны в файл с помощью опции outputFile.
npx vitest --reporter=jsonexport default defineConfig({
test: {
reporters: ['json'],
},
});Пример отчета JSON:
{
"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
Начиная с Vitest 3, JSON-средство отчётности включает информацию о покрытии в coverageMap, если покрытие включено.
HTML Средство отчётности
Генерирует HTML-файл для интерактивного просмотра результатов тестов через GUI. После генерации файла Vitest запустит локальный сервер разработки и предоставит ссылку для просмотра отчета в браузере.
Выходной файл можно указать с помощью опции outputFile. Если опция outputFile не указана, будет создан новый HTML-файл.
npx vitest --reporter=htmlexport default defineConfig({
test: {
reporters: ['html'],
},
});TIP
Для этого средства отчётности требуется установленный пакет @vitest/ui.
TAP Средство отчётности
Генерирует отчёт в соответствии с Test Anything Protocol (TAP).
npx vitest --reporter=tapexport default defineConfig({
test: {
reporters: ['tap'],
},
});Пример отчета TAP:
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 Средство отчётности
Генерирует плоский отчёт TAP. Как и средство отчётности tap, результаты тестов форматируются в соответствии со стандартами TAP, но наборы тестов форматируются как плоский список, а не как вложенная иерархия.
npx vitest --reporter=tap-flatexport default defineConfig({
test: {
reporters: ['tap-flat'],
},
});Пример плоского отчета TAP:
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Средство отчётности зависших процессов
Отображает список зависших процессов, если они препятствуют безопасному завершению работы Vitest. Средство отчётности hanging-process само по себе не отображает результаты тестов, но может использоваться в сочетании с другим средством отчётности для мониторинга процессов во время выполнения тестов. Использование этого средства отчётности может быть ресурсоемким, поэтому его следует обычно применять для отладки в ситуациях, когда Vitest постоянно не может завершить процесс.
npx vitest --reporter=hanging-processexport default defineConfig({
test: {
reporters: ['hanging-process'],
},
});Средство отчётности Github Actions
Генерирует команды рабочего процесса для аннотирования сбоев тестов. Это средство отчётности автоматически активируется вместе со средством отчётности default, когда process.env.GITHUB_ACTIONS === 'true'.
Если вы настраиваете нестандартные средства отчётности, вам необходимо явно добавить github-actions.
export default defineConfig({
test: {
reporters: process.env.GITHUB_ACTIONS ? ['dot', 'github-actions'] : ['dot'],
},
});Вы можете настроить пути к файлам, которые используются в формате команды аннотации GitHub, используя опцию onWritePath. Это полезно при запуске Vitest в контейнерной среде, такой как Docker, где пути к файлам могут отличаться от путей в среде 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 Средство отчётности
Сохраняет результаты тестов локально, чтобы их можно было позже объединить с помощью команды --merge-reports. По умолчанию сохраняет все результаты в папку .vitest-reports, но это поведение можно переопределить флагами --outputFile или --outputFile.blob.
npx vitest --reporter=blob --outputFile=reports/blob-1.jsonМы рекомендуем использовать это средство отчётности, если вы запускаете Vitest на разных машинах с флагом --shard. Все blob-отчёты могут быть объединены в единый отчёт с помощью команды --merge-reports в конце вашего CI-конвейера:
npx vitest --merge-reports=reports --reporter=json --reporter=defaultTIP
Ни --reporter=blob, ни --merge-reports не работают в режиме наблюдения.
Пользовательские средства отчётности
Вы можете использовать сторонние пользовательские средства отчётности, установленные из NPM, указав их имя пакета в опции средств отчётности:
npx vitest --reporter=some-published-vitest-reporterexport default defineConfig({
test: {
reporters: ['some-published-vitest-reporter'],
},
});Кроме того, вы можете определить свои собственные пользовательские средства отчётности и использовать их, указав путь к файлу:
npx vitest --reporter=./path/to/reporter.tsПользовательские средства отчётности должны реализовывать интерфейс Reporter.