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
相关产品推荐
相关产品推荐

