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 使用工作线程不仅可以并行运行测试,还可以提供隔离
-
通过禁用此选项,您的测试将按顺序运行,但在相同的全局上下文中,因此您必须自己提供隔离。
-
-
如果您依赖全局状态(前端框架通常这样做)或者您的代码依赖于为每个测试单独定义的环境,这可能会导致各种问题