首页 > 解决方案 > Jest - 在递归函数中测试回调调用

问题描述

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

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

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

标签: javascriptnode.jstypescriptjestjs

解决方案


推荐阅读