首页 > 解决方案 > 在路由内部模拟一个 api 函数调用而不实际调用它

问题描述

我的 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,这只是为了暂时避免在我的配置中进行严格的空检查。但是我已经登录了条件,它确实模拟了这个值

标签: javascriptapimockingjestjs

解决方案


哦,男孩,我错过了这个。这里的问题是我的路由在所有应用程序中都使用相同的类实例,而我的单元测试试图模拟它的另一个实例——这就是为什么在调用其他服务器时在路由函数中没有使用解析的值.

因此,只需使用该代理类的相同实例,我就可以轻松获得我的模拟值


推荐阅读