jest默认支持多文件并行测试,需合理配置maxworkers、projects及避免跨文件状态依赖;maxworkers可设为数字、百分比或'infinite';projects支持按模块并行;--verbose可验证worker并发执行。

Jest 默认就支持多文件并行运行测试,不需要额外开启开关,但要真正发挥并行能力,得合理配置资源限制、路径匹配和模块隔离。
明确 maxWorkers 控制并发数量
Jest 用 maxWorkers 决定最多同时跑几个测试进程。默认值是 os.cpus().length - 1,适合大多数本地开发场景。若想更精细控制:
- 设为数字(如
4):固定使用 4 个 worker - 设为字符串(如
'50%'):占用一半 CPU 核心数 - 设为
'infinite':不限制(不推荐,容易拖慢机器)
在jest.config.js中配置:module.exports = { maxWorkers: '50%', };
按模块或目录拆分 projects 实现逻辑级并行
大型项目常有多个子模块(如 dom/、utils/、api/),可为每个模块单独定义测试配置,Jest 会并行执行各 project 的测试套件:
module.exports = {
projects: [
{
displayName: 'dom',
testMatch: ['<rootdir>/dom/test/**/*.spec.ts'],
maxWorkers: 2,
},
{
displayName: 'utils',
testMatch: ['<rootdir>/utils/test/**/*.spec.ts'],
maxWorkers: 3,
}
],
};</rootdir></rootdir>
这样既能隔离环境(比如不同 testEnvironment),又能避免单一大包阻塞整体测试流。
注意:并行 ≠ 无序,顺序依赖需主动规避
Jest 并行时,测试文件之间默认不保证执行顺序。如果某些测试强依赖前置状态(如数据库增删改查链),不能靠文件名排序来“碰运气”。正确做法是:
- 每个测试文件内部自行 setup/teardown,不共享状态
- 禁用并行:运行时加
--runInBand,或配置maxWorkers: 1 - 避免跨文件状态耦合,这是设计层面的问题,不是配置能绕过的
验证是否真正在并行运行
启动测试时加上 --verbose 参数:
npx jest --verbose
终端里每条测试日志开头会显示 worker ID(如 worker#1、worker#3),多个 ID 同时出现,说明并行生效。
不复杂但容易忽略











