NestJs+TypeScript+Jest运行测试报Class extends value undefined错误
问题根因
- 最常见原因是NestJS核心依赖包版本和
@nestjs/testing包版本不匹配:@nestjs/testing内的TestingLoggerService需要继承@nestjs/common导出的Logger类,当两个包版本不一致时,@nestjs/common导出的类结构发生变化,就会出现继承的值为undefined的报错。 - tsconfig配置错误:你当前的
exclude配置里主动排除了./node_modules/@types/node/index.d.ts,会导致部分Node内置类型、第三方依赖的类型推导失效,也可能引发运行时的类型加载错误。 - 缺失Jest适配TypeScript的必要依赖,或者Jest配置不正确,导致测试运行时无法正确解析NestJS的装饰器、模块导出逻辑。
解决步骤
- 第一步:统一所有NestJS相关依赖的版本
首先执行命令查看所有Nest包的版本:
确保三个包的版本完全一致,如果不一致,安装相同版本即可,比如所有包都升级到最新LTS版本:yarn list @nestjs/common @nestjs/core @nestjs/testing
安装完成后删除node_modules和yarn.lock重新安装依赖,避免缓存问题。yarn add @nestjs/common@latest @nestjs/core@latest @nestjs/testing@latest --dev - 第二步:修正tsconfig配置
删除exclude数组里的./node_modules/@types/node/index.d.ts这一行,修正后的exclude配置为:
不需要重复声明node_modules相关的匹配规则,多余的排除规则反而会引发类型加载问题。"exclude": [ "node_modules", "dist" ] - 第三步:检查Jest配置
确保你已经安装了ts-jest、@types/jest、jest相关依赖,并且项目根目录下有正确的jest配置文件(jest.config.js),参考配置如下:
配置完成后重新执行module.exports = { moduleFileExtensions: ['js', 'json', 'ts'], rootDir: 'src', testRegex: '.*\\.spec\\.ts$', transform: { '^.+\\.(t|j)s$': 'ts-jest' }, collectCoverageFrom: ['**/*.(t|j)s'], coverageDirectory: '../coverage', testEnvironment: 'node' }yarn test即可正常运行测试。
内容的提问来源于stack exchange,提问作者Mike Shum
相关产品推荐
相关产品推荐

