NestJs + TypeScript + Jest - TypeError:类扩展值未定义不是构造函数或 null

Mik*_*hum 4 unit-testing typescript jestjs nestjs

当我尝试向我的 NestJs 应用程序添加一些测试时遇到错误。有一个名为app.controller.spec.ts自动生成的测试文件,它是一个单元测试。当我尝试使用纱线测试命令运行测试时,它会抛出一个错误,指出:

测试套件无法运行 TypeError:类扩展值未定义不是构造函数或 null

 at Object.<anonymous> (../node_modules/@nestjs/testing/services/testing-logger.service.js:7:38)
 at Object.<anonymous> (../node_modules/@nestjs/testing/testing-module.builder.js:9:34)
Run Code Online (Sandbox Code Playgroud)

我的 tsconfig 配置:

{
  "compilerOptions": {
    "module": "commonjs",
    "declaration": true,
    "removeComments": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "target": "es2017",
    "sourceMap": true,
    "outDir": "./dist",
    "baseUrl": "./",
    "incremental": true,
    "skipLibCheck": true
  },
  "exclude": [
    "node_modules",
    "./node_modules",
    "./node_modules/*",
    "./node_modules/@types/node/index.d.ts",
  ]
}
Run Code Online (Sandbox Code Playgroud)

纱线测试命令: "test": "jest"

单元测试文件内容:

import { Test, TestingModule } from '@nestjs/testing';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import {ConfigModule} from './config/config.module';

describe('AppController', () => {
  let appController: AppController;

  beforeEach(async () => {
    const app: TestingModule = await Test.createTestingModule({
      imports: [ConfigModule],
      controllers: [AppController],
      providers: [AppService],
    }).compile();

    appController = app.get<AppController>(AppController);
  });

  describe('root', () => {
    it('should return "pong"', () => {
      expect(appController.getHello()).toBe('pong');
    });
  });
});

Run Code Online (Sandbox Code Playgroud)

Jay*_*iel 6

您使用@nestjs/testing的是版本 8,但您使用的是版本 6 上的@nestjs/common@nestjs/core和许多其他@nestjs/软件包。这些主要版本应该相互匹配。将所有内容升级到 v8,或降级@nestjs/testing到 v6 以匹配通用包和核心包。