pool
Type: 'threads' | 'forks' | 'vmThreads'
Default: 'threads'
Version: Since Vitest 1.0.0-beta
取值:用于运行测试的池。
threads * 线程 *
使用tinypool(Piscina 的轻量级分支)启用多线程。
注意:
-
使用线程时,您无法使用与进程相关的 API,例如
process.chdir()
。 -
一些用本机语言编写的库,例如 Prisma、
bcrypt
和canvas
,在多线程中运行时会出现问题并遇到段错误。-
在这些情况下,建议使用
forks
池。
-
forks * 叉子
通过tinypool使用 child_process
而不是 worker_threads
。
注意:
-
测试和主进程之间的通信不如
threads
池那么快。 -
forks
池中提供了与进程相关的 API,例如process.chdir()
。
vmThreads * 虚拟机线程 *
使用 threads
池中的 VM 上下文(在沙盒环境内)运行测试。
注意:
-
这使得测试运行得更快,但运行 ESM 代码时 VM 模块不稳定。
-
您的测试将泄漏内存 - 为了解决这个问题,请考虑手动编辑
poolOptions.vmThreads.memoryLimit
值。
警告
-
在沙箱中运行代码有一些优点(测试速度更快),但也有许多缺点。
-
本机模块中的全局变量(例如
fs
、path
等)与测试环境中存在的全局变量不同。因此,这些本机模块引发的任何错误都将引用与代码中使用的错误构造函数不同的错误构造函数try { fs.writeFileSync('/doesnt exist') } catch (err) { console.log(err instanceof Error) // false }
-
导入 ES 模块会无限期地缓存它们,如果您有很多上下文(测试文件),这会导致内存泄漏。 Node.js 中没有可以清除该缓存的 API。
-
在沙箱环境中访问全局变量需要更长的时间。
-
使用此选项时请注意这些问题。 Vitest 团队无法解决我们这边的任何问题。
-
poolOptions
Type: Record<'threads' | 'forks' | 'vmThreads', {}>
Default: {}
Version: Since Vitest 1.0.0-beta
poolOptions.threads * 池选项.线程 *
threads
池的选项。
import { defineConfig } from 'vitest/config' export default defineConfig({ test: { poolOptions: { threads: { // Threads related options here } } } })
poolOptions.threads.maxThreads
Type: number
Default: available CPU即可用 CPU
值: 最大线程数。您还可以使用 VITEST_MAX_THREADS
环境变量
poolOptions.threads.minThreads
Type: number
Default: available CPU即可用 CPU
值:最小线程数。您还可以使用 VITEST_MIN_THREADS
环境变量。
poolOptions.threads.singleThread
Type: boolean
Default: false
意义:
-
在单个工作线程内使用相同的环境运行所有测试。
表现
-
这将禁用内置模块隔离(您的源代码或内联代码仍将针对每个测试重新评估),但可以提高测试性能。
注意:
-
尽管此选项将强制测试一个接一个地运行,但此选项与 Jest 的
--runInBand
不同。-
Vitest 使用工作线程不仅可以并行运行测试,还可以提供隔离
-
通过禁用此选项,您的测试将按顺序运行,但在相同的全局上下文中,因此您必须自己提供隔离。
-
-
如果您依赖全局状态(前端框架通常这样做)或者您的代码依赖于为每个测试单独定义的环境,这可能会导致各种问题
poolOptions.threads.useAtomics
Type: boolean
Default: false
-
作用
-
使用 Atomics 来同步线程。
-
这在某些情况下可以提高性能,但可能会导致旧 Node 版本中出现段错误。
-
poolOptions.threads.isolate
Type: boolean
Default: true
隔离每个测试文件的环境
poolOptions.threads.execArgv
Type: string[]
Default: []
将附加参数传递给线程中的 node
poolOptions.forks
forks
池的选项
import { defineConfig } from 'vitest/config' export default defineConfig({ test: { poolOptions: { forks: { // Forks related options here } } } })
poolOptions.forks.maxForks
-
Type: number
-
Default: available CPUs 默认值:可用 CPU
-
值:最大进程数
poolOptions.forks.minForks
Type: number Default: available CPUs 默认值:可用 CPU 值: 最少的进程数量。
poolOptions.forks.isolate
Type: boolean
Default: true
隔离每个测试文件的环境。
poolOptions.forks.singleFork
Type: boolean
Default: false
意义:
-
在单个子进程中使用相同的环境运行所有测试。
-
这将禁用内置模块隔离(您的源代码或内联代码仍将针对每个测试重新评估),但可以提高测试性能。
-
警告
-
尽管此选项将强制测试一个接一个地运行,但此选项与 Jest 的
--runInBand
不同。 -
Vitest 使用子进程不仅可以并行运行测试,还可以提供隔离。
-
通过禁用此选项,您的测试将按顺序运行,但在相同的全局上下文中,因此您必须自己提供隔离。
-
如果您依赖全局状态(前端框架通常这样做)或者您的代码依赖于为每个测试单独定义的环境,这可能会导致各种问题。
-
poolOptions.forks.execArgv
Type: string[]
Default: []
意义:
-
将附加参数传递给子进程中的
node
进程
poolOptions.vmThreads
vmThreads
池的选项。
import { defineConfig } from 'vitest/config' export default defineConfig({ test: { poolOptions: { vmThreads: { // VM threads related options here } } } })
poolOptions.vmThreads.maxThreads *
-
Type:
number
-
Default: available CPUs 默认值:可用 CPU
-
值:最大线程数。您还可以使用
VITEST_MAX_THREADS
环境变量。
poolOptions.vmThreads.minThreads *
-
Type:
number
-
Default: available CPUs 默认值:可用 CPU
-
值:最小线程数。您还可以使用
VITEST_MIN_THREADS
环境变量。
poolOptions.vmThreads.memoryLimit *
-
Type:
string | number
-
Default:
1 / CPU Cores
-
值:指定工作线程被回收之前的内存限制。
-
该值在很大程度上取决于您的环境,因此最好手动指定它,而不是依赖默认值。
-
poolOptions.vmThreads.useAtomics
Type: boolean
Default: false
意义:
-
使用 Atomics 来同步线程。
注意:
-
这在某些情况下可以提高性能,但可能会导致旧 Node 版本中出现段错误
poolOptions.vmThreads.execArgv
Type: string[]
Default: []
意义:
-
将附加参数传递给 VM 上下文中的
node
进程
fileParallelism 文件并行度
Type: boolean Default: true CLI: --no-file-parallelism 、 --fileParallelism=false Version: Since Vitest 1.1 值:
-
所有测试文件是否应该并行运行。
-
将其设置为 false 会将 maxWorkers 和 minWorkers 选项覆盖为 1 。
注意:
-
此选项不会影响在同一文件中运行的测试。如果您想并行运行它们,请在描述中或通过配置使用
concurrent
选项。
maxWorkers
Type: number
Version: Since Vitest 1.1
值:
-
运行测试的最大工作线程数。
-
poolOptions.{threads,vmThreads}.maxThreads
/poolOptions.forks.maxForks
具有更高的优先级。
testTimeout 测试超时
-
Type:
number
-
Default:
5000
-
CLI:
--test-timeout=5000
-
测试的默认超时(以毫秒为单位)
hookTimeout 钩子超时
-
Type:
number
-
Default:
10000
-
挂钩的默认超时(以毫秒为单位)
teardownTimeout * 拆卸超时 *
-
Type:
number
-
Default:
10000
-
Vitest 关闭时等待关闭的默认超时时间,以毫秒为单位
silent
-
Type:
boolean
-
Default:
false
-
CLI:
--silent
,--silent=false
-
值:
-
测试的静默控制台输出
-
setupFiles
Type: string | string[]
值:
-
安装文件的路径。它们将在每个测试文件之前运行
注意:
-
更改设置文件将触发所有测试的重新运行。
-
您可以在内部使用
process.env.VITEST_POOL_ID
(类似整数的字符串)来区分线程 -
请注意,如果您正在运行
--threads=false
,则此安装文件将在同一全局范围内多次运行。这意味着,您在每次测试之前都会访问相同的全局对象,因此请确保您没有做超出您需要的事情
globalSetup 全局设置
Type: string | string[]
值:全局安装文件的路径,相对于项目根目录。
意义:全局设置文件可以导出命名函数 setup
和 teardown
或返回拆卸函数的 一个default
函数
注意:
-
可以有多个全局安装文件。 setup 和teardown 按顺序执行,teardown 按相反顺序执行。
-
自 Vitest 1.0.0-beta 起,全局设置仅在至少有一个正在运行的测试时运行。这意味着在更改测试文件后,全局设置可能会在监视模式下开始运行(测试文件将等待全局设置完成后再运行)。
-
请注意,全局设置在不同的全局范围中运行,因此您的测试无法访问此处定义的变量。但是,从 1.0.0 开始,您可以通过
provide
方法将可序列化的数据传递给测试:// globalSetup.js export default function setup({ provide }) { provide('wsPort', 3000) } ts // example.test.js import { inject } from 'vitest' inject('wsPort') === 3000 //如果您使用 TypeScript,则可以扩展 ProvidedContext 类型以对 provide/inject 方法进行类型安全访问: declare module 'vitest' { export interface ProvidedContext { wsPort: number } }
watchExclude * 观看排除 *
Type: string[]
Default: ['/node_modules/', '/dist/']
值:触发监视重新运行时将忽略的文件路径的全局模式。
orceRerunTriggers * 强制重新运行触发器
Type: string[]
Default: ['/package.json/', '/vitest.config.*/', '/vite.config.*/']
值:将触发整个套件重新运行的文件路径的全局模式
注意:
-
当与
--changed
参数配对时,如果在 git diff 中找到触发器,将运行整个测试套件。 -
如果您正在测试调用 CLI 命令,则很有用,因为 Vite 无法构建模块图:
test('execute a script', async () => { // Vitest cannot rerun this test, if content of `dist/index.js` changes await execa('node', ['dist/index.js']) })
-
确保您的文件未被
watchExclude
排除。
coverage * 覆盖范围
-
可以使用
v8
、istanbul
或自定义覆盖率解决方案进行覆盖率收集。 -
可以使用点符号向 CLI 提供覆盖选项
npx vitest --coverage.enabled --coverage.provider=istanbul --coverage.all //如果您使用带有点表示法的覆盖选项,请不要忘记指定 --coverage.enabled 。在这种情况下,请勿提供单个 --coverage 选项。
coverage.provider
Type: 'v8' | 'istanbul' | 'custom'
Default: 'v8'
CLI: --coverage.provider=<provider>
意义:
-
使用
provider
选择覆盖率收集工具。
coverage.enabled
Type: boolean
Default: false
Available for providers: 'v8' | 'istanbul'
CLI: --coverage.enabled, --coverage.enabled=false
意义:
-
启用覆盖范围收集。可以使用
--coverage
CLI 选项覆盖
coverage.include
Type: string[]
Default: ['**']
Available for providers: 'v8' | 'istanbul'
CLI: --coverage.include=<path>, --coverage.include=<path1> --coverage.include=<path2> 意义:
-
包含在覆盖范围内作为 glob 模式的文件列表
coverage.extension
Type: string | string[]
Default: ['.js', '.cjs', '.mjs', '.ts', '.mts', '.cts', '.tsx', '.jsx', '.vue', '.svelte', '.marko']
Available for providers: 'v8' | 'istanbul'
CLI: --coverage.extension=<extension>, --coverage.extension=<extension1> --coverage.extension=<extension2>
coverage.exclude
Type: string[]
Available for providers: 'v8' | 'istanbul'
CLI: --coverage.exclude=<path>, --coverage.exclude=<path1> --coverage.exclude=<path2>
值:作为 glob 模式从覆盖范围中排除的文件列表。
Default:
'coverage/**', 'dist/**', '**/[.]**', 'packages/*/test?(s)/**', '**/*.d.ts', '**/virtual:*', '**/__x00__*', '**/\x00*', 'cypress/**', 'test?(s)/**', 'test?(-*).?(c|m)[jt]s?(x)', '**/*{.,-}{test,spec}.?(c|m)[jt]s?(x)', '**/__tests__/**', '**/{karma,rollup,webpack,vite,vitest,jest,ava,babel,nyc,cypress,tsup,build}.config.*', '**/vitest.{workspace,projects}.[jt]s?(on)', '**/.{eslint,mocha,prettier}rc.{?(c|m)js,yml}', ]
coverage.all
Type: Available for providers: 'v8' | 'istanbul'
Default: true (since Vitest 1.0.0)
Available for providers: 'v8' | 'istanbul'
CLI: --coverage.all, --coverage.all=false
意义:
-
是否将所有文件(包括未经测试的文件)包含到报告中
coverage.clean
Type: boolean Default: true Available for providers: 'v8' | 'istanbul' CLI: --coverage.clean, --coverage.clean=false
运行测试之前清理覆盖率结果
coverage.cleanOnRerun
-
Type:
boolean
-
Default:
true
-
Available for providers:
'v8' | 'istanbul'
-
CLI:
--coverage.cleanOnRerun
,--coverage.cleanOnRerun=false
-
值:关于监视重播的干净报道报告
coverage.reportsDirectory
-
Type:
string
-
Default:
'./coverage'
-
Available for providers:
'v8' | 'istanbul'
-
CLI:
--coverage.reportsDirectory=<path>
-
值:写入覆盖率报告的目录。
-
注意:要在 HTML 报告器的输出中预览覆盖率报告,必须将此选项设置为 html 报告目录的子目录(例如
./html/coverage
)。