测试控制器和方法:
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和typescript。