Средства отчётности
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.json
export default defineConfig({
test: {
reporters: ['json'],
outputFile: './test-output.json',
},
});
Комбинирование средств отчётности
Вы можете использовать несколько средств отчётности одновременно для вывода результатов тестов в различных форматах. Например:
npx vitest --reporter=json --reporter=default
export 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=basic
export 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=verbose
export 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=dot
export 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=junit
export 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=json
export 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=html
export default defineConfig({
test: {
reporters: ['html'],
},
});
TIP
Для этого средства отчётности требуется установленный пакет @vitest/ui
.
TAP Средство отчётности
Генерирует отчёт в соответствии с Test Anything Protocol (TAP).
npx vitest --reporter=tap
export 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-flat
export 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-process
export 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=default
TIP
Ни --reporter=blob
, ни --merge-reports
не работают в режиме наблюдения.
Пользовательские средства отчётности
Вы можете использовать сторонние пользовательские средства отчётности, установленные из NPM, указав их имя пакета в опции средств отчётности:
npx vitest --reporter=some-published-vitest-reporter
export default defineConfig({
test: {
reporters: ['some-published-vitest-reporter'],
},
});
Кроме того, вы можете определить свои собственные пользовательские средства отчётности и использовать их, указав путь к файлу:
npx vitest --reporter=./path/to/reporter.ts
Пользовательские средства отчётности должны реализовывать интерфейс Reporter.