Jest - 在递归函数中测试回调调用

时间:2021-05-07 15:57:22

标签: javascript node.js typescript jestjs

我正在尝试测试一个辅助函数,该函数对查询游标进行迭代,并对结果调用回调。看起来有点像这样:

async function recursiveFunction(callback: () => Promise<any>): Promise<void> {
  const result = await callback();
  if (result.hasNext) recursiveFunction(callback);
}

describe('recursiveFunction', () => {
  const NUMBER_OF_CALLS = 6;
  const mockCallback = jest.fn();

  mockCallback.mockResolvedValue({ hasNext: false });
  for (let i = 0; i < NUMBER_OF_CALLS - 1; i += 1) {
    mockCallback.mockResolvedValueOnce({ hasNext: true });
  }

  describe('When there are no errors', () => {
    beforeEach(async () => {
      await recursiveFunction(mockCallback);
    });

    it(`should have called callback ${NUMBER_OF_CALLS} times`, () => {
      expect(mockCallback).toHaveBeenCalledTimes(NUMBER_OF_CALLS);
    });
  });
});

问题是,经过几次迭代后,它似乎“失去了”mockCallback 的踪迹(对于这个测试用例,任何超过 4 次):

expect(jest.fn()).toHaveBeenCalledTimes(expected)

    Expected number of calls: 6
    Received number of calls: 4
expect(jest.fn()).toHaveBeenCalledTimes(expected)

    Expected number of calls: 8
    Received number of calls: 4

我想知道是否有一种方法可以做到这一点,而无需执行诸如将我的递归函数包装在一个类中并将其保留为导出函数之类的操作。 提前致谢!

0 个答案:

没有答案
相关问题