Проверьте сервис NestJs с Jest - PullRequest
1 голос
/ 08 апреля 2019

Я ищу способ протестировать мой NestJs PlayerController с Jest. Мой контроллер и сервисная декларация:

import { QueryBus, CommandBus, EventBus } from '@nestjs/cqrs';

/**
 * The service assigned to query the database by means of commands
 */
@Injectable()
export class PlayerService {
    /**
     * Ctor
     * @param queryBus
     */
    constructor(
        private readonly queryBus: QueryBus,
        private readonly commandBus: CommandBus,
        private readonly eventBus: EventBus
    ) { }


@Controller('player')
@ApiUseTags('player')
export class PlayerController {
    /**
     * Ctor
     * @param playerService
     */
    constructor(private readonly playerService: PlayerService) { }

Мой тест:

describe('Player Controller', () => {
  let controller: PlayerController;

  beforeEach(async () => {
    const module: TestingModule = await Test.createTestingModule({
      imports: [PlayerService, CqrsModule],
      controllers: [PlayerController],
      providers: [
        PlayerService,
      ],
    }).compile();


    controller = module.get<PlayerController>(PlayerController);
  });

  it('should be defined', () => {
    expect(controller).toBeDefined();
  });
...

Nest не может разрешить зависимости PlayerService (?, CommandBus, EventBus). Пожалуйста, убедитесь, что аргумент в index [0] доступно в контексте PlayerService.

  at Injector.lookupComponentInExports (../node_modules/@nestjs/core/injector/injector.js:180:19)

Есть ли способ обойти эту проблему зависимости?

1 Ответ

1 голос
/ 08 апреля 2019

Не работает, потому что вы импортируете PlayerService.Вы можете импортировать только модули, провайдеры могут быть импортированы через модуль или объявлены в массиве providers:

imports: [PlayerService, CqrsModule]
          ^^^^^^^^^^^^^

Однако в модульном тесте вы хотите протестировать отдельные блоки в отдельности, а невзаимодействие между различными подразделениями и их зависимостями.Так что лучше, чем импортировать или объявлять ваши зависимости, было бы предоставить макеты для PlayerService или поставщиков CqrsModule.

См. этот ответ для различия между модульными и e2e тестами.

См. этот ответ о том, как создавать макеты.

...