Jest测试是否应该包含/dist/目录下的测试文件?
TypeScript项目测试文件编译与Jest执行配置问题解答
要不要将*.test.ts加入tsconfig.json的排除规则?
绝大多数场景下都建议将测试文件加入排除规则,仅极少数特殊场景不需要排除:
- 你开发的是测试工具类库,需要将测试相关的工具函数、预置用例等代码作为包产物的一部分对外发布
- 项目有特殊的全量编译校验流程,要求所有TS文件(包括测试)都经过编译环节做语法、类型的合规校验
除此之外都建议排除,理由如下:
- 减少不必要的编译耗时,测试代码不需要上线,编译属于无效资源消耗
- 避免dist目录混入非业务代码,减少生产部署包体积,也避免后续自动化流程误将测试文件识别为业务代码处理
- 从根源上避免你遇到的Jest同时识别到两份测试文件的问题
应该让Jest运行/src下的TS测试还是/dist下的JS测试?
日常开发流程优先跑/src下的TS测试,仅在特殊校验场景下才需要跑/dist下的JS测试。
日常跑TS测试的优势:
- 配合
ts-jest或者@swc/jest可以直接执行TS文件,不需要提前全量编译,修改代码后跑测试的反馈速度更快 - 支持源码映射,断点调试时可以直接对应到TS源码,调试体验远优于编译后的JS文件
- 不会出现源码修改后没重新编译,跑了旧版本测试得到错误结果的问题
仅在以下场景需要额外跑/dist下的JS测试:
你开发的是对外发布的npm类库,需要在发布前校验编译后的JS产物实际运行逻辑符合预期,这属于发布前的兼容性校验环节,需要单独配置独立的Jest执行规则,不要和日常开发的单元测试流程混用。
问题快速修复方案
- 调整tsconfig.json配置,排除测试文件:
{ "exclude": ["node_modules", "dist", "**/*.test.ts", "**/*.spec.ts"] }
- 调整Jest配置,避免扫描到dist目录的测试文件:
// jest.config.js module.exports = { // 方式1:仅匹配src下的测试文件 testMatch: ["<rootDir>/src/**/*.test.ts"], // 方式2:直接忽略dist目录 modulePathIgnorePatterns: ["<rootDir>/dist/"] }
内容的提问来源于stack exchange,提问作者BobtheMagicMoose
相关产品推荐
相关产品推荐

