Контроллер и метод для тестирования:
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