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

如何为Node.js项目配置ts-jest?配置遇阻求助

Node.js + ts-jest 配置错误解决指南

问题根源

你遇到的两个错误本质是模块解析规则不匹配和jest配置未适配NodeNext模块系统:

  1. 测试代码里导入.js后缀文件,但实际源文件是.ts,NodeNext模式要求扩展名严格匹配;
  2. dist目录下编译后的ES模块被jest加载,而jest默认CommonJS环境无法识别import语法。

分步解决

1. 修正测试文件导入路径

把测试文件里的:

import { parseStartTime } from "./time.js";

改成:

import { parseStartTime } from "./time.ts";

或者依赖后续jest配置自动处理.js后缀(见步骤3)。

2. 调整tsconfig.json

在compilerOptions中补充配置,适配ts-jest的模块解析逻辑:

{
  "compilerOptions": {
    // 原有配置保留...
    "moduleResolution": "NodeNext",
    "allowImportingTsExtensions": true,
    "noEmit": true // 测试阶段无需编译TS文件,ts-jest会直接处理
  }
}

如果需要保留生产代码编译能力,可以单独创建tsconfig.test.json继承主配置,仅覆盖noEmit等测试相关选项。

3. 更新jest.config.js

适配NodeNext模块系统,同时排除dist目录避免干扰:

/** @type {import('ts-jest').JestConfigWithTsJest} **/
export default {
  testEnvironment: "node",
  transform: {
    "^.+\\.[tj]sx?$": ["ts-jest", {
      tsconfig: "./tsconfig.json",
      useESM: true // 启用ES模块支持
    }]
  },
  moduleFileExtensions: ["ts", "js", "json"],
  testMatch: ["**/?(*.)+(spec|test).ts"],
  moduleNameMapper: {
    "^(\\.{1,2}/.*)\\.js$": "$1" // 自动移除导入路径中的.js后缀
  },
  roots: ["<rootDir>/src"],
  testPathIgnorePatterns: ["/dist/"] // 忽略dist目录下的文件
};

4. 同步package.json模块类型

如果你的项目使用ES模块,在package.json中添加:

"type": "module"

NodeNext模式下,package.json的type会直接影响模块解析行为,需和tsconfig配置保持一致。

5. 清理并重新测试

删除dist目录,避免残留的编译文件干扰jest:

rm -rf dist

然后运行测试:

npx jest

内容的提问来源于stack exchange,提问作者Legion

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 17:52:25