在路由内部模拟api函数调用,而无需实际调用它

时间:2019-03-30 18:29:10

标签: javascript api mocking jestjs

我的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的{​​{1}}检查,那只是暂时避免在我的配置中进行严格的null检查。但是我已经登录了条件语句,它确实模拟了值

1 个答案:

答案 0 :(得分:0)

哦,男孩,我错过了吗?这里的问题是我的路线在整个应用程序中都使用相同的类实例,而我的单元测试则试图模拟它的另一个实例-这就是为什么在调用其他服务器时在路由函数中未使用解析值的原因

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