添加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)的类型定义,需完成以下配置:
- 安装Jest类型定义包:
npm install --save-dev @types/jest - 在测试专用
tsconfig.test.json中添加类型配置:{ "extends": "./tsconfig.json", "compilerOptions": { // 保留原有配置,新增以下行 "types": ["jest"] }, "include": ["src/**/*.tests.ts"] } - 确保
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;
验证步骤
- 执行
tsc --project tsconfig.test.json确认编译无错误 - 运行
jest测试,验证两个问题均已解决
内容的提问来源于stack exchange,提问作者Chris Barr
相关产品推荐
相关产品推荐

