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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 05:43:13