NestJS控制器单元测试:模拟Service的delete方法返回值不匹配问题
问题解决方案
问题原因
- 你的Service层
delete方法是async修饰的异步方法,返回值为Promise类型,控制器直接调用该方法,因此控制器的delete方法同样返回Promise对象 - 你使用
mockReturnValue为异步方法设置返回值,不符合实际运行时的返回类型;同时断言时未await控制器方法的执行结果,直接将未完成的Promise实例和预期数值对比,导致报错。
修复方案
- 将mock返回值的方法从
mockReturnValue替换为mockResolvedValue,模拟异步方法的成功返回结果 - 断言时添加
await关键字,等待异步方法执行完成拿到实际返回值后再做对比
修正后的测试用例代码
it('testing delete', async () => { mockService.delete.mockResolvedValue(5); expect(await controller.delete(5)).toEqual(5); })
如果需要模拟异步删除失败的场景,可使用mockRejectedValue方法设置抛出的错误信息。
内容的提问来源于stack exchange,提问作者Etfrerrr
相关产品推荐
相关产品推荐

