Как использовать значение, которое возвращается из контроллера?Тестирование контроллеров на NestJs - PullRequest
0 голосов
/ 27 сентября 2019

Контроллер и метод для тестирования:

import { Controller, Get, Response, HttpStatus, Param, Body, Post, Request, Patch, Delete, Res } from '@nestjs/common';
@Controller('api/parts')
export class PartController {
  constructor(private readonly partsService: partsService) { }

  @Get()
  public async getParts(@Response() res: any) {
    const parts = await this.partsService.findAll();
    return res.status(HttpStatus.OK).json(parts);
  }
}

И это модульный тест, который должен проверить метод getParts:

describe('PartsController', () => {
  let partsController: PartsController;
  let partsService: partsService;

  beforeEach(async () => {
    partsService = new partsService(Part);
    partsController= new PartsController(partsService);
  });

  describe('findAll', () => {
    it('should return an array of parts', async () => {
      const result = [{ name: 'TestPart' }] as Part[];

      jest.spyOn(partsService, 'findAll').mockImplementation(async () => result);

      const response = {
        json: (body?: any) => {
          expect(body).toBe(result);
        },
        status: (code: number) => response,
      };

      await partsController.getParts(response);
    });
  });
});

Этот тест работает правильно, но я думаю, что это плохорешение.Когда я исследовал эту проблему, я увидел эту опцию:

const response = {
  json: (body?: any) => {},
  status: (code: number) => response,
};
expect(await partsController.getParts(response)).toBe(result);

Но когда я пытаюсь это сделать, мой тест не работает, вызывает await partsController.getParts (response) // undefined Итак, что я должен сделать, чтобы сделатьмой тест выглядит хорошо?

В решении, которое я использую: nodeJS sequelize, nestJS, typcript

...