Angular项目用Jest跳过测试仍耗时,如何将跳过测试的耗时降至0秒
原因说明
xdescribe仅会跳过测试块内部的用例执行,Jest仍然会完成完整的文件加载、转译、依赖解析流程:
- 解析并转译整个测试文件的TypeScript代码
- 加载所有import引入的依赖(包括Angular核心模块、NgRx、Translate组件、共享库等重依赖)
- 扫描整个测试文件的结构确认测试块的跳过标记
你示例的测试文件引入了大量第三方和业务公共依赖,光是依赖加载的耗时就超过20秒,这就是你标记跳过仍然有耗时的核心原因。
解决方案
彻底跳过指定测试文件(推荐,可将对应耗时直接降至0)
如果确定这部分测试长期不需要运行,直接在Jest配置文件(通常为jest.config.js/jest.config.ts)中添加忽略规则,Jest会完全跳过这些文件的加载、解析流程:
module.exports = { // 其余原有配置保持不变 testPathIgnorePatterns: [ // 支持精准匹配单个文件 '<rootDir>/src/app/xxx/course-mapping-add.guard.spec.ts', // 也支持正则匹配一批路径下的测试文件 '<rootDir>/src/app/legacy-module/.*\\.spec\\.ts$' ] }
如果是临时跳过不需要修改配置,直接在测试命令追加忽略参数即可:
jest --testPathIgnorePatterns=course-mapping-add --testPathIgnorePatterns=legacy-module
按需切换测试执行
如果需要在不同场景下选择性运行这部分测试,可以在测试文件顶部添加条件判断,不需要运行时直接终止文件执行:
if (process.env.SKIP_UNNECESSARY_TESTS === 'true') { process.exit(0); } // 原有import、测试代码保持不变
运行测试时传入对应的环境变量即可触发跳过逻辑:
# Linux/Mac环境 SKIP_UNNECESSARY_TESTS=true jest # Windows环境 set SKIP_UNNECESSARY_TESTS=true && jest
全量测试通用提速优化
针对你全量测试45分钟的性能问题,也可以通过通用配置大幅降低耗时:
- 换用更快的转译器:将jest-preset-angular的转译器替换为
esbuild,相比默认ts-jest转译速度提升50%以上 - 开启Jest缓存:默认Jest会缓存转译结果,二次运行不需要重复转译文件,可添加
--cache参数显式开启 - 并行执行:添加
--maxWorkers=50%参数,利用多核CPU并行执行测试,全量运行速度可提升2-3倍 - 增量测试:日常开发使用
jest --onlyChanged仅运行改动文件对应的测试,CI阶段使用--changedSince=main仅运行主分支之后改动代码对应的测试,不需要每次全量执行
内容的提问来源于stack exchange,提问作者user2024080
相关产品推荐
相关产品推荐

