Jest测试套件执行过慢求助:86个测试耗时超500秒
针对Vue Jest测试套件性能优化的进一步建议
1. 定位拖慢整体的单个测试
- 执行
jest --verbose --runInBand,查看每个测试用例的具体耗时,精准找出耗时异常的测试——比如是否存在不必要的异步等待、重复组件渲染,或者无意中依赖了外部资源(如未mock的接口)的测试。 - 检查测试是否触发了未清理的全局副作用,比如修改了Vue原型、全局状态但未彻底重置。
2. 优化组件挂载与清理逻辑
- 虽然用了
shallowMount,但如果测试依赖Vuex、Vue Router等全局插件,可将这些实例的初始化移至beforeAll/afterAll,而非beforeEach/afterEach,减少重复初始化的开销。 - 确保
afterEach中正确调用wrapper.destroy(),并按需清理mock状态:用jest.clearAllMocks()清除调用记录,jest.resetAllMocks()重置mock实现,避免过度清理浪费资源。
3. 强化Mock策略
- 对第三方库(如axios)、复杂子组件做全局mock,比如
jest.mock('axios'),避免测试执行实际逻辑或加载不必要的模块。 - 直接mock Vuex的action/method,不要让测试真的执行完整的状态流转逻辑,减少计算量。
4. 调整Jest配置细节
- 关闭不必要的
collectCoverage,若必须收集,限定覆盖目录,比如collectCoverageFrom: ['src/components/TargetPage/**/*.vue'],避免扫描无关文件。 - 配置
moduleNameMapper映射静态资源,将样式、图片等mock为空模块,减少Jest解析开销:moduleNameMapper: { '\\.(css|scss|png|svg)$': '<rootDir>/__mocks__/emptyMock.js' } - 禁用watch模式,执行测试时添加
--watchAll=false,避免占用额外资源。
5. CI/CD环境针对性优化
- 不要盲目调大
maxWorkers,CI资源有限,可设置maxWorkers: '50%'让Jest根据CPU核心数自动适配,减少上下文切换损耗。 - 开启CI缓存:缓存
node_modules和Jest的缓存目录(node_modules/.cache/jest),避免每次重新安装依赖、编译代码。 - 拆分测试任务:将86个测试用例按文件或模块拆分到多个CI job并行执行,缩短单个任务的耗时。
6. 其他优化方向
- 把使用
done回调的异步测试改为async/await,提升执行效率与可维护性。 - 升级Jest、vue-test-utils、babel-jest等依赖到最新稳定版,新版本通常包含性能优化。
内容的提问来源于stack exchange,提问作者ephraim lambarte
相关产品推荐
相关产品推荐

