【发布时间】:2020-01-27 20:46:38
【问题描述】:
控制器和测试方法:
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
【问题讨论】:
-
您是否有任何理由想要注入响应并自行管理,而不是让 Nest 为您处理?
标签: node.js unit-testing testing nestjs sequelize-typescript