首页 > 解决方案 > 模拟多个呼叫

问题描述

我正在使用 ts-mock-imports 并且我想模拟一个函数调用的多个返回值,然后检查一个函数是否被调用了给定的次数。以下作品:

    const getUserSpy = dataServiceMock.mock('getUserFromDB')
                                      .returns({...USER_1})
                                      .returns({...USER_2});

在我的测试用例中,我有两个对 getUserFromDB() 的调用,在上述情况下,getUserSpy.callCount 等于 2。但这取决于顺序,所以我宁愿能够执行以下操作:

    const getUser1Spy = dataServiceMock.mock('getUserFromDB')
                                      .withArgs(USER_1_ID).returns({...USER_1});
    const getUser2Spy = dataServiceMock.mock('getUserFromDB')
                                      .withArgs(USER_2_ID).returns({...USER_2});

我期望的是 getUser1Spy 被调用一次,而 getUser2Spy 被调用一次。但是,看起来第二次调用 withArgs() 删除了先前的模拟实例。

标签: javascripttypescriptunit-testingmocking

解决方案


这有效:

const getUserSpy = dataServiceMock.mock('getUserFromDB');
getUserSpy.withArgs(USER_1_ID).returns({...USER_1});
getUserSpy.withArgs(USER_2_ID).returns({...USER_2});

// ... then ...

assert(getUserSpy.callCount).equals(2);


推荐阅读