Jest+TypeScript测试重复执行:TS测试通过JS测试失败
解决Jest + TypeScript测试执行两次的问题
这种情况我之前也碰到过,核心原因就是Jest默认会扫描匹配所有符合规则的.ts和.js文件,你的编译后的JS测试文件和源TS测试文件都被它抓去执行了,自然就跑两次;而且编译后的JS版本因为没经过ts-jest的转译处理,很容易因为环境或语法兼容问题失败。
给你几个具体的解决步骤:
1. 调整Jest配置,精准匹配测试文件
修改你的jest.config.js(或jest.config.ts),明确指定只扫描TS格式的测试文件,同时排除编译后的JS文件所在目录:
module.exports = { // 只匹配.ts/.tsx格式的测试文件,也可按需保留.js兼容旧文件 testMatch: [ "**/__tests__/**/*.+(ts|tsx)", "**/?(*.)+(spec|test).+(ts|tsx)" ], // 排除编译输出目录(比如dist、build)和node_modules testPathIgnorePatterns: ["/node_modules/", "/dist/"], // 用ts-jest转译TS文件,确保测试能正常执行 transform: { "^.+\\.(ts|tsx)$": "ts-jest" }, // 配置文件扩展名优先级,优先识别TS文件 moduleFileExtensions: ["ts", "tsx", "js", "jsx"] };
2. 确保TS编译输出到独立目录
检查你的tsconfig.json,设置outDir为单独的目录(比如./dist),让编译后的JS文件统一存放,方便Jest精准排除:
{ "compilerOptions": { "outDir": "./dist", // 其他TS配置... } }
3. 规范测试文件命名与存放
尽量让测试文件遵循*.test.ts或*.spec.ts的命名规则,统一放在__tests__目录下。这样Jest的匹配逻辑会更精准,不会误抓编译后的JS版本。
调整完成后,Jest就只会执行你的TS源测试文件,不会再出现两次执行的情况,也能避免编译后的JS测试失败的问题。
内容的提问来源于stack exchange,提问作者BernalCarlos
相关产品推荐
相关产品推荐

