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

添加module.exports后Jest测试失败,TypeScript NPM包测试问题

问题根源拆解

你遇到的是两个独立问题:ES模块与CommonJS导出导入不匹配导致的运行时错误,以及Jest全局类型未配置导致的编译错误。以下是针对性解决方案:


解决方案一:修复导出导入不匹配问题

项目切换为ES模块后,module.exports = MyClass属于CommonJS风格导出,而测试文件中import { MyClass }是ES模块的命名导入逻辑——此时CommonJS的默认导出会被ES模块包裹在default属性下,导致导入的MyClass为undefined,进而引发后续Cannot read properties of undefined错误。

你可以二选一修正:

  • 方式1:保持CommonJS导出,修改测试文件导入语句:
    // 直接导入default
    import MyClass from "./index";
    // 或解构default别名
    import { default as MyClass } from "./index";
    
  • 方式2:统一使用ES模块导出,修改./src/index.ts:
    // 命名导出(对应测试文件原导入语句)
    export class MyClass { /* 类实现 */ }
    // 或默认导出(需配合后续类型配置)
    export default MyClass;
    

解决方案二:修复Jest全局类型缺失问题

改为export default MyClass后出现的TS2304错误,是因为TypeScript无法识别Jest全局函数(expect/it/describe)的类型定义,需完成以下配置:

  1. 安装Jest类型定义包:
    npm install --save-dev @types/jest
    
  2. 在测试专用tsconfig.test.json中添加类型配置:
    {
      "extends": "./tsconfig.json",
      "compilerOptions": {
        // 保留原有配置,新增以下行
        "types": ["jest"]
      },
      "include": ["src/**/*.tests.ts"]
    }
    
  3. 确保jest.config.ts关联测试用TS配置:
    import type { Config } from 'jest';
    
    const config: Config = {
      preset: 'ts-jest',
      testEnvironment: 'node', // 若为Web库则改为jsdom
      transform: {
        '^.+\\.tsx?$': ['ts-jest', {
          tsconfig: 'tsconfig.test.json'
        }]
      }
    };
    
    export default config;
    

验证步骤

  1. 执行tsc --project tsconfig.test.json确认编译无错误
  2. 运行jest测试,验证两个问题均已解决

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 08:48:28