javascript - 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
我想知道是否有一种方法可以做到这一点,而无需将递归函数包装在一个类中并将其保留为导出函数。提前致谢!
解决方案
推荐阅读
- java - 为什么我的小程序不显示?
- c# - 从 C# 中的 SOAP 响应中删除 CDATA
- html - 纯 CSS 倒计时动画
- java - Java按值传递:可变类型和不可变类型的区别
- sql - 默认的 Google Cloud SQL 实例不属于任何组织
- angular - 将数据从材质对话框传递到父组件
- c# - 如何从任务栏(WPF)隐藏打开的子窗口?
- amazon-web-services - 如何使用 AWS 以太坊区块链模板连接到以太坊实例?
- ssh - 在通过 SSH 端口转发访问的服务器上启动 WS 连接
- javascript - Chrome javascript地理位置未显示允许/阻止弹出窗口