Jest测试报错TypeError: CognitoService不是构造函数,求解决方案
Jest单元测试报错:TypeError: cognito_utils_1.CognitoService is not a constructor
报错信息
TypeError: cognito_utils_1.CognitoService is not a constructor
可能的原因及解决思路
1. 导出/导入方式不匹配
这是触发该错误的最常见原因,需严格对齐类的导出与导入方式:
如果类用默认导出:
// cognito-service.ts export default class CognitoService { // 类实现 }导入时必须使用默认导入,不能用命名导入:
// 正确写法 import CognitoService from './cognito-service'; // 错误写法 // import { CognitoService } from './cognito-service';如果类用命名导出:
// cognito-service.ts export class CognitoService { // 类实现 }导入时必须使用命名导入:
// 正确写法 import { CognitoService } from './cognito-service';
2. Jest模块解析配置异常
检查jest.config.js中的关键配置项:
moduleFileExtensions:确保包含ts、js,顺序建议为['ts', 'js', 'json']transform:确认配置ts-jest处理TypeScript文件:transform: { '^.+\\.tsx?$': 'ts-jest', }moduleNameMapper:如果使用路径别名(如@/utils/cognito-service),需在Jest中正确映射:moduleNameMapper: { '^@/(.*)$': '<rootDir>/src/$1', }
3. 编译产物异常
若先编译TypeScript再执行测试,检查编译后的cognito-service.js导出是否正常。也可在测试代码中打印导入的模块,确认导出结构:
// index.test.ts import * as cognitoUtils from './cognito-service'; console.log(cognitoUtils); // 查看输出中是否包含CognitoService构造函数
4. 循环导入问题
排查是否存在循环导入:比如index.ts导入CognitoService,而cognito-service.ts又导入index.ts的内容,这会导致模块加载时导出未初始化,引发构造函数不存在的错误。
5. 版本兼容性问题
检查TypeScript、Jest、ts-jest的版本是否兼容,部分版本组合会导致模块解析异常。可参考ts-jest官方文档的版本兼容表,升级或降级到匹配版本。
内容的提问来源于stack exchange,提问作者codebear22
相关产品推荐
相关产品推荐

