You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:31:06