在路由内部模拟一个 api 函数调用而不实际调用它
Posted
技术标签:
【中文标题】在路由内部模拟一个 api 函数调用而不实际调用它【英文标题】:Mock an api function call inside of a route without actually calling it 【发布时间】:2019-03-30 18:29:09 【问题描述】:我的 api 中有一条路由调用另一台服务器,但我遇到了一个问题,我无法为另一台服务器调用测试、模拟已解析的值。无论我如何处理,单元测试似乎总是调用其他服务器。
let iAgent: PartialMock<InternalAgent>;
beforeEach(() =>
iAgent =
extend: jest.fn()
;
);
if(iAgent.extend)
iAgent.extend.mockResolvedValue();
const r = await request.post('/api/v1/webhooks/extend')
.send(
id: 1
);
expect(r.status).toEqual(200);
expect(iAgent.extend).toBeCalledTimes(1);
在我的实际路线中,它每次都会调用它:
await iAgent.extend();
并且由于其他服务器未运行而在此行失败,并且我收到拒绝连接的消息。显然iAgent.extend
函数甚至没有被调用一次,却设法返回了一个拒绝。
所以无论如何,我相信它不应该在我的路由中调用实际函数并跳过它,如果我理解正确,它会在测试中回退到我的解析值,但事实并非如此,我不确定如何继续。
哦,为了清楚 if
检查我的 mockResolvedValue
,这只是为了暂时避免在我的配置中进行严格的空检查。但是我已经登录了条件,它确实模拟了值
【问题讨论】:
【参考方案1】:天哪,我错过了这个。这里的问题是我的路由在所有应用程序中都使用相同的类实例,而我的单元测试试图模拟它的另一个实例——这就是为什么在调用其他服务器时在路由函数中没有使用解析的值.
因此,只需使用该代理类的相同实例,我就可以轻松获得我的模拟值
【讨论】:
以上是关于在路由内部模拟一个 api 函数调用而不实际调用它的主要内容,如果未能解决你的问题,请参考以下文章
在Android应用程序中模拟一个类 - 而不是在单元测试范围内