NestJS TypeScript Jest — ошибка типа: Класс расширяет значение, не определенное, не является конструктором или нулем

#typescript #unit-testing #jestjs #nestjs

Вопрос:

Я столкнулся с ошибкой, когда пытался добавить некоторые тесты в свое приложение NestJS. Существует автоматически сгенерированный тестовый файл с именем app.controller.spec.ts, который является модульным тестом. Когда я пытаюсь запустить тесты с помощью команды yarn test, она выдает сообщение об ошибке:

Не удалось запустить набор тестов TypeError: значение расширения класса undefined не является конструктором или 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)
 

Моя конфигурация 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",
  ]
}
 

команда испытания пряжи:
"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');
    });
  });
});

 

Комментарии:

1. Какие у вас @nestjs/ версии пакетов? Можете ли вы добавить их к своему вопросу?

2. Спасибо вам за ваш ответ! Вот они: «@nestjs/общие»: «6.7.2», «@nestjs/ядро»: «6.7.2», «@nestjs/jwt»: «6.1.1», «@nestjs/мангуст»: «6.1.2», «@nestjs/паспорт»: «6.1.0», «@nestjs/платформа-экспресс»: «6.7.2», «@nestjs/тип»: «6.2.0», «шутка»: «24.9.0» Версия NodeJS: v14.17.4

3. Кроме того, утилиты, которые я использовал для поиска циклических зависимостей (сначала я подумал, что это вызывает проблему), говорят, что в проекте нет циклических зависимостей.

4. О, ничего себе, снова на Nest v6. А как насчет ваших разработчиков @nestjs/ , а также

5. «@nestjs/cli»: «6.9.0», «@nestjs/схемы»: «6.7.0», «@nestjs/тестирование»: «^8.0.6» Я действительно ценю ваши отзывы, но я полагаю, что этот вопрос для меня больше не актуален. Поскольку у нас не было времени на поиск решения, мы решили просто написать тесты API с postman. Мы все еще можем обойти это, чтобы это помогло другим, кто сталкивается с подобной проблемой.

Ответ №1:

У вас есть @nestjs/testing версия 8, но вы используете @nestjs/common , @nestjs/core , и многие другие @nestjs/ пакеты ниже версии 6. Эти основные версии должны соответствовать друг другу. Либо обновите все до версии 8, либо понизьте @nestjs/testing до версии 6, чтобы соответствовать общим и основным пакетам.