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

Angular 9迁移Karma至Jest报错:无法无new调用类构造函数

解决Angular 9迁移Jest时"Class constructor cannot be invoked without 'new'"错误

我之前帮不少开发者解决过Angular 9转Jest时的这个报错,本质是ES6类的转译规则与Jest的调用逻辑不兼容导致的,给你几个针对性的解决步骤:

  • 检查tsconfig.spec.json的编译目标
    确保测试环境的TypeScript编译目标设置为es2015或更高,不要用es5。因为Angular 9的组件是ES6类,转成ES5构造函数后,Jest调用时会触发这个错误。修改示例:

    {
      "extends": "./tsconfig.json",
      "compilerOptions": {
        "target": "es2015",
        "module": "esnext",
        // 其他原有配置...
      }
    }
    
  • 调整Jest配置的转译规则
    有时候jest-preset-angular的默认转译没覆盖到所有组件文件,需要明确指定transform规则,确保.ts/.html文件都用官方处理器转译。更新你的jest.config.js:

    module.exports = {
      preset: "jest-preset-angular",
      setupFilesAfterEnv: ['<rootDir>/src/test-setup.ts'],
      globals: {
        'ts-jest': {
          tsconfig: '<rootDir>/tsconfig.spec.json',
          stringifyContentPathRegex: '\\.html$'
        }
      },
      transform: {
        '^.+\\.(ts|js|html)$': 'jest-preset-angular'
      },
      // 其他原有配置...
    };
    
  • 清除Jest缓存
    Jest的缓存机制可能保留了旧的转译结果,导致新配置不生效。运行命令清除缓存:

    npx jest --clearCache
    
  • 检查自定义/第三方代码的类调用方式
    如果你的组件依赖的第三方库,或者自己写的工具函数里有用Object.create(SomeComponent.prototype)这种非new的方式调用类,一定要改成标准的new SomeComponent()语法。

  • 确认test-setup.ts配置正确
    确保测试入口文件里正确导入了Jest的Angular适配代码:

    import 'jest-preset-angular/setup-jest';
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:28:04