Skip to content

globalSetup

  • 类型: string | string[]

相对于 项目根目录 的全局初始化文件路径。

全局初始化文件可以导出命名的 setupteardown 函数,或者导出一个返回 teardown 函数的 default 函数:

js
export function setup(project) {
  console.log('setup')
}

export function teardown() {
  console.log('teardown')
}
js
export default function setup(project) {
  console.log('setup')

  return function teardown() {
    console.log('teardown')
  }
}

注意,setup 方法和 default 函数接收一个 测试项目 作为第一个参数。全局初始化在创建测试工作线程之前调用,且仅当至少有一个测试排队时才会调用;清理在所有测试文件运行完成后调用。在 watch 模式 中,清理会在进程退出之前调用。如果你需要在测试重新运行前重新配置初始化,可以使用 onTestsRerun 钩子。

可以存在多个全局初始化文件。setupteardown 会按顺序执行,清理则以相反顺序执行。

DANGER

注意,全局初始化在测试工作线程创建之前运行于不同的全局作用域,因此你的测试无法访问在此处定义的全局变量。但你可以通过 provide 方法将可序列化的数据传递给测试,并在测试中通过从 vitest 导入的 inject 读取:

ts
import { inject } from 'vitest'

inject('wsPort') === 3000
ts
import type { TestProject } from 'vitest/node'

export default function setup(project: TestProject) {
  project.provide('wsPort', 3000)
}

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

如果你需要在与测试相同的线程中执行代码,请使用 setupFiles,但请注意它会在每个测试文件之前运行。

处理测试重新运行

你可以定义一个自定义回调函数,在 Vitest 重新运行测试时调用。测试运行器会等待它完成后再执行测试。注意,你不能解构 project,例如 { onTestsRerun },因为它依赖于上下文。

globalSetup.ts
ts
import type { TestProject } from 'vitest/node'

export default function setup(project: TestProject) {
  project.onTestsRerun(async () => {
    await restartDb()
  })
}