Skip to content
Vitest 1
Main Navigation 指南API配置高级
1.6.1
0.34.6

简体中文

English
繁體中文
Español
Français
Русский
Português – Brasil
Deutsch
日本語
한국어
Italiano
Polski
Türkçe
čeština
magyar

简体中文

English
繁體中文
Español
Français
Русский
Português – Brasil
Deutsch
日本語
한국어
Italiano
Polski
Türkçe
čeština
magyar

主题

Sidebar Navigation

指南

为什么选择 Vitest

快速开始

特性

工作区

命令行界面

测试筛选

报告器

代码覆盖率

快照(Snapshot)

模拟(Mocking)

类型测试

Vitest UI

浏览器模式

源码内测试

测试上下文

测试环境

扩展匹配器

IDE 集成

调试

与其他测试运行器的比较

迁移指南

常见错误

提升性能

API

测试 API 索引

模拟函数

Vi

expect

expectTypeOf

assert(断言)

assertType

配置

管理 Vitest 配置文件

配置 Vitest

页面导航

报告器 ​

Vitest 提供了多种内置报告器,用于以不同的格式显示测试输出,并且还支持使用自定义报告器。您可以使用 --reporter 命令行选项,或者在配置文件中设置 reporters 属性来选择不同的报告器。如果未指定报告器,Vitest 将使用下文描述的 default(默认)报告器。

通过命令行使用报告器:

bash
npx vitest --reporter=verbose

通过 vitest.config.ts 使用报告器:

ts
/// <reference types="vitest" />
import { defineConfig } from 'vite';

export default defineConfig({
  test: {
    reporters: ['verbose'],
  },
});

部分报告器支持通过传入额外选项进行自定义。各个报告器的专属选项将在下面的章节中描述。

TIP

自 Vitest v1.3.0 起

ts
export default defineConfig({
  test: {
    reporters: ['default', ['junit', { suiteName: 'UI tests' }]],
  },
});

报告器输出 ​

默认情况下,Vitest 的报告器会将输出打印到终端。当使用 json、html 或 junit 报告器时,您可以通过在 Vite 配置文件或 CLI 中设置 outputFile 配置选项,将测试输出写入文件。

bash
npx vitest --reporter=json --outputFile=./test-output.json
ts
export default defineConfig({
  test: {
    reporters: ['json'],
    outputFile: './test-output.json',
  },
});

组合报告器 ​

您可以同时使用多个报告器,以不同格式输出测试结果。例如:

bash
npx vitest --reporter=json --reporter=default
ts
export default defineConfig({
  test: {
    reporters: ['json', 'default'],
    outputFile: './test-output.json',
  },
});

上面的例子会将测试结果以默认样式打印到终端,同时以 JSON 格式写入指定的输出文件。

当使用多个报告器时,也可以指定多个输出文件,如下所示:

ts
export default defineConfig({
  reporters: ['junit', 'json', 'verbose'],
  outputFile: {
    junit: './junit-report.xml',
    json: './json-report.json',
  },
});

这个例子将分别写入 JSON 和 XML 报告,并将详细报告打印到终端。

内置报告器 ​

默认报告器 ​

默认情况下(即未指定报告器时),Vitest 将在每个测试套件运行时分层显示其结果,并在套件通过后折叠。当所有测试运行完成后,最终的终端输出将显示结果摘要和所有失败测试的详细信息。

测试进行时的示例输出:

bash
✓ __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

测试完成后最终输出:

bash
✓ __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)

基本报告器 ​

basic(基础)报告器显示已运行的测试文件,并在整个测试套件运行完成后显示结果摘要。只有失败的测试才会包含在报告中。

bash
npx vitest --reporter=basic
ts
export default defineConfig({
  test: {
    reporters: ['basic'],
  },
});

使用基本报告器的示例输出:

bash
✓ __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 报告器相同的分层结构,但不折叠已通过的测试套件。最终的终端输出显示所有已运行的测试,包括已通过的测试。

bash
npx vitest --reporter=verbose
ts
export default defineConfig({
  test: {
    reporters: ['verbose'],
  },
});

通过测试套件的最终终端输出示例:

bash
✓ __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(基础)报告器摘要。

bash
npx vitest --reporter=dot
ts
export default defineConfig({
  test: {
    reporters: ['dot'],
  },
});

通过测试套件的示例终端输出:

bash
....

 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 格式输出测试结果。可以通过 outputFile 配置选项将其打印到终端或写入 XML 文件。

bash
npx vitest --reporter=junit
ts
export default defineConfig({
  test: {
    reporters: ['junit'],
  },
});

JUnit XML 报告的示例:

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 &gt; 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 &gt; 4 - 2 should equal 2" time="0">
        </testcase>
    </testsuite>
</testsuites>

输出的 XML 包含嵌套的 testsuites 和 testcase 标签。您可以使用环境变量 VITEST_JUNIT_SUITE_NAME 和 VITEST_JUNIT_CLASSNAME 来分别配置它们的 name 和 classname 属性。这些也可以通过报告器选项进行自定义:

ts
export default defineConfig({
  test: {
    reporters: [
      [
        'junit',
        { suiteName: 'custom suite name', classname: 'custom-classname' },
      ],
    ],
  },
});

JSON 报告器 ​

以 JSON 格式输出测试结果报告。可以通过 outputFile 配置选项将其打印到终端或写入文件。

bash
npx vitest --reporter=json
ts
export default defineConfig({
  test: {
    reporters: ['json'],
  },
});

JSON 报告的示例:

json
{
  "numTotalTestSuites": 1,
  "numPassedTestSuites": 0,
  "numFailedTestSuites": 1,
  "numPendingTestSuites": 0,
  "numTotalTests": 1,
  "numPassedTests": 0,
  "numFailedTests": 1,
  "numPendingTests": 0,
  "numTodoTests": 0,
  "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
          }
        }
      ],
      "startTime": 1697737019787,
      "endTime": 1697737019797,
      "status": "failed",
      "message": "",
      "name": "/root-directory/__tests__/test-file-1.test.ts"
    }
  ]
}

HTML 报告器 ​

生成一个 HTML 文件,通过交互式 GUI 查看测试结果。生成文件后,Vitest 将保持本地开发服务器运行,并提供一个链接以在浏览器中查看报告。

可以使用 outputFile 配置选项指定输出文件。如果没有提供 outputFile 选项,将创建一个新的 HTML 文件。

bash
npx vitest --reporter=html
ts
export default defineConfig({
  test: {
    reporters: ['html'],
  },
});

TIP

此报告器需要安装 @vitest/ui 包。

TAP 报告器 ​

输出遵循 Test Anything Protocol (TAP) 的报告。

bash
npx vitest --reporter=tap
ts
export default defineConfig({
  test: {
    reporters: ['tap'],
  },
});

TAP 报告的示例:

bash
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 flat 报告。与 tap 报告器一样,测试结果的格式设置为遵循 TAP 标准,但测试套件的格式设置为平面列表,而不是嵌套层次结构。

bash
npx vitest --reporter=tap-flat
ts
export default defineConfig({
  test: {
    reporters: ['tap-flat'],
  },
});

TAP flat 报告的示例:

bash
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 始终无法退出进程的情况。

bash
npx vitest --reporter=hanging-process
ts
export default defineConfig({
  test: {
    reporters: ['hanging-process'],
  },
});

Github Actions 报告器 1.3.0+ ​

输出 workflow commands(工作流命令),用于为测试失败提供注释。当 process.env.GITHUB_ACTIONS === 'true' 时,此报告器会自动与 default(默认)报告器一起启用。

如果您配置了非默认报告器,则需要显式添加 github-actions。

ts
export default defineConfig({
  test: {
    reporters: process.env.GITHUB_ACTIONS ? ['dot', 'github-actions'] : ['dot'],
  },
});
Github ActionsGithub Actions

自定义报告器 ​

您可以通过在报告器配置中指定其包名称,来使用从 NPM 安装的第三方自定义报告器:

bash
npx vitest --reporter=some-published-vitest-reporter
ts
export default defineConfig({
  test: {
    reporters: ['some-published-vitest-reporter'],
  },
});

此外,您可以定义自己的自定义报告器,并通过指定其文件路径来引用它们:

bash
npx vitest --reporter=./path/to/reporter.ts

自定义报告器应实现 Reporter interface(报告器接口)。

Pager
上一页测试筛选
下一页代码覆盖率

基于 MIT 许可证 发布。

版权所有 (c) 2024 Mithril Contributors

https://v1.vitest.dev/guide/reporters

基于 MIT 许可证 发布。

版权所有 (c) 2024 Mithril Contributors