Typescript 控制器的NestJS单元测试:模拟从服务中删除不工作
我目前正在对我的NestJS服务进行单元测试。我的实体称为“用户”,我建立了一个基本服务,允许我与MS SQL server交互,在控制器中建立GET和POST端点 我的控制器文件中有一个Typescript 控制器的NestJS单元测试:模拟从服务中删除不工作,typescript,unit-testing,nestjs,Typescript,Unit Testing,Nestjs,我目前正在对我的NestJS服务进行单元测试。我的实体称为“用户”,我建立了一个基本服务,允许我与MS SQL server交互,在控制器中建立GET和POST端点 我的控制器文件中有一个delete方法,它基本上只是从我的服务中调用delete方法: @Injectable() export class ServiceName { constructor(@InjectEntityManager() private manager: EntityManager) {} async
delete
方法,它基本上只是从我的服务中调用delete
方法:
@Injectable()
export class ServiceName {
constructor(@InjectEntityManager() private manager: EntityManager) {}
async delete(id: number): Promise<any> {
return await this.manager.delete(User, id);
}
// some other functions
以下是我的spec.ts文件中的测试用例:
const mockService = {
delete: jest.fn(),
};
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
controllers: [ControllerName],
providers: [ServiceName],
})
.overrideProvider(ServiceName)
.useValue(mockService)
.compile();
service = module.get<ServiceName>(ServiceName);
controller = module.get<ControllerName>(ControllerName);
});
it('testing delete', async () => {
mockService.delete.mockReturnValue(5);
expect(controller.delete(5)).toEqual(5);
})
上述测试用例失败,下面显示错误消息:
expect(received).toEqual(expected) // deep equality
Expected: 5
Received: {}
122 | it('testing delete', async () => {
123 | mockService.delete.mockReturnValue(5);
> 124 | expect(controller.delete(5)).toEqual(5);
| ^
125 | })
126 | });
127 | });
非常感谢您的帮助 作为提示,虽然您可以直接通过
提供者
,但我建议在单元测试中提供提供者的模拟。因此,您不必拥有提供者:[ServiceName]
{
提供:ServiceName,
使用价值:{
删除:jest.fn().mockResolvedValue(5)
}
}
这样,您就可以从测试中了解所使用的一切。此外,当提供者有自己的依赖项时,此模式将防止您遇到问题,这些依赖项可能需要模拟,也可能不需要模拟。有关更多示例,请向我们展示您的
控制器。删除方法btwserviceName。删除是异步的,因此您需要在控制器上使用和使用wait。删除返回成功!出于某种原因,使用.mockResolvedValue
使测试通过。非常感谢你,迈克尔!