本文档适用于 v2 (旧版本)。如需查看最新版本请访问 https://cn.vitest.dev.

Skip to content

Node API ​

WARNING

Vitest 暴露了实验性的私有 API。由于可能不遵循语义化版本规范(SemVer),因此可能会出现不兼容的更改,请在使用 Vitest 时锁定版本。

startVitest ​

你可以使用 Vitest 的 Node API 开始运行 Vitest 测试:

js
import { startVitest } from 'vitest/node'

const vitest = await startVitest('test')

await vitest?.close()

如果测试可以启动,则 startVitest 函数返回 Vitest 实例。 如果出现以下情况之一,则返回 undefined:

  • Vitest 未找到 vite 包 (通常与 Vitest 一起安装)
  • 如果启用了 coverage,并且运行模式为 "test",但并未安装 "coverage" 包(@vitest/coverage-v8 或 @vitest/coverage-istanbul)
  • 如果未安装环境包 (jsdom/happy-dom/@edge-runtime/vm)

如果在运行期间返回 undefined 或者测试失败, Vitest 会将 process.exitCode 设置为 1。

如果未启用监视模式,Vitest 将会调用 close 方法。

如果启用了监视模式并且终端支持 TTY, 则 Vitest 会注册控制台快捷键。

你可以将过滤器列表作为第二个参数传递下去。Vitest 将仅运行包含其文件路径中至少一个传递字符串的测试。

此外,你可以使用第三个参数传递 CLI 参数,这将覆盖任何测试配置选项。

或者,你可以将完整的 Vite 配置作为第四个参数传递进去,这将优先于任何其他用户定义的选项。

运行测试后,您可以从 state.getFiles API 获取结果:

ts
const vitest = await startVitest('test')

console.log(vitest.state.getFiles()) // [{ type: 'file', ... }]

自 Vitest 2.1 起,建议使用 “扩展报告器” API 和 state.getFiles。今后,Vitest 将直接返回这些对象:

ts
const vitest = await startVitest('test')

const [fileTask] = vitest.state.getFiles()
const testFile = vitest.state.getReportedEntity(fileTask)

createVitest ​

你可以使用 createVitest 函数创建自己的 Vitest 实例. 它返回与 startVitest 相同的 Vitest 实例, 但不会启动测试,也不会验证已安装的包。

js
import { createVitest } from 'vitest/node'

const vitest = await createVitest('test', {
  watch: false,
})

parseCLI ​

你可以使用此方法来解析命令行参数。它接受字符串(其中参数由单个空格分隔)或与 Vitest CLI 使用的格式相同的 CLI 参数的字符串数组。它返回一个过滤器和选项,你可以稍后将其传递给 createVitest 或 startVitest 方法。

ts
import { parseCLI } from 'vitest/node'

parseCLI('vitest ./files.ts --coverage --browser=chrome')

Vitest ​

Vitest 实例需要当前的测试模式。它可以是以下之一:

  • 运行运行时测试时为 test
  • 运行基准测试时为 benchmark

mode ​

test ​

测试模式仅会调用 test 或 it 中的函数,并在遇到 bench 时抛出错误。此模式使用配置中的 include 和 exclude 选项查找测试文件。

benchmark ​

基准测试模式会调用 bench 函数,并在遇到 test 或 it 时抛出错误。此模式使用配置中的 benchmark.include 和 benchmark.exclude 选项查找基准测试文件。

start ​

你可以使用 start 方法运行测试或者基准测试。你还可以传递一个字符串数组以筛选测试文件。

provide ​

Vitest 提供了 provide 方法,它是 vitest.getRootTestProject().provide 的简写形式。通过这个方法,你可以将值从主线程传递到测试中。所有值在存储之前都会通过 structuredClone 进行检查,但值本身不会被克隆。

要在测试中接收值,需要从 vitest entrypont 导入 inject 方法:

ts
import { inject } from 'vitest'
const port = inject('wsPort') // 3000

为了提高类型安全性,我们鼓励您增强 ProvidedContext 的类型:

ts
import { createVitest } from 'vitest/node'

const vitest = await createVitest('test', {
  watch: false,
})
vitest.provide('wsPort', 3000)

declare module 'vitest' {
  export interface ProvidedContext {
    wsPort: number
  }
}

WARNING

在技术上来说,provide 是 TestProject 的一个方法,因此它受限于特定的项目。然而,所有项目都从核心项目继承了值,这使得 vitest.provide 成为了一种普遍的方式来向测试传递值。

TIP

该方法同样适用于 全局配置文件,在无法使用公共API的情况下。

js
export default function setup({ provide }) {
  provide('wsPort', 3000)
}

Released under the MIT License.