并行性
文件级并行
Vitest 默认会并行执行 测试文件 。具体使用哪种并行机制取决于配置的 pool
类型:
forks
(默认)和vmForks
会在不同的 child processes 中执行测试threads
和vmThreads
则会在不同的 worker threads 中运行
在文档中,“子进程”和“工作线程”统称为“工作者”。你可以通过 minWorkers
和 maxWorkers
参数来控制并行工作的数量,也可以通过 poolOptions
进行更详细的配置。
如果项目包含大量测试文件,通常并行执行会大幅提升速度。但具体效果还要看项目本身、运行环境以及是否启用了 隔离。若需要关闭文件级并行化,可以将 fileParallelism
设为 false
。更多性能优化技巧,请参考 性能指南 。
测试用例并行
与 测试文件 不同, Vitest 在同一个文件中会顺序执行 测试用例 。也就是说,同一个文件里的测试会按定义顺序一个接一个地执行。
如果希望让同一文件中的多个测试并行执行,可以使用 concurrent
选项。启用后, Vitest 会将同一文件中的并发测试分组,并基于 maxConcurrency 控制并行度,然后通过 Promise.all
一起执行。
Vitest 不会自动分析你的测试是否可以并行,也不会为了并发而额外创建工作者。这意味着,只有在测试中有大量异步操作时,使用并发才能提升性能。例如,以下示例即便指定了 concurrent ,也会顺序执行,因为它们是同步的:
ts
test.concurrent('the first test', () => {
expect(1).toBe(1)
})
test.concurrent('the second test', () => {
expect(2).toBe(2)
})
如果希望所有测试用例都并发执行,可以将 sequence.concurrent
配置项设为 true
。