jest.fn() 是 Jest 提供的模拟函数,自动记录调用次数、参数和返回值;通过 mock.calls.length 获取调用次数,mock.calls[i] 获取第 i 次调用参数,支持 toHaveBeenCalledWith 和 toHaveBeenCalledTimes 等语义化匹配器。

jest.fn() 是 Jest 提供的模拟函数(mock function),它能自动记录每次调用的次数、传入的参数、返回值等信息,无需手动埋点。只要把函数替换成 jest.fn(),后续就能通过它的属性和方法读取调用痕迹。
查看调用次数:使用 mock.calls.length
每次调用 mock 函数时,Jest 会把这次调用的信息(包括参数)存进 mock.calls 数组,所以调用次数就是该数组的长度。
-
fn.mock.calls.length—— 返回整数,表示被调用了几次 - 例如:
expect(myMock.mock.calls.length).toBe(2)验证是否调用了两次
获取每次调用的参数:读取 mock.calls
mock.calls 是一个二维数组,每一项是该次调用的参数列表(按顺序)。
-
fn.mock.calls[0]→ 第一次调用的参数数组,如['a', 1] -
fn.mock.calls[1][0]→ 第二次调用的第一个参数 -
expect(fn.mock.calls[0]).toEqual(['hello', true])可断言参数内容
快速验证参数和次数:用 toHaveBeenCalledWith 和 toHaveBeenCalledTimes
Jest 提供了更语义化的匹配器,写法更简洁、报错更清晰:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
-
expect(fn).toHaveBeenCalledWith('x', 42)—— 检查是否至少有一次以指定参数调用过 -
expect(fn).toHaveBeenCalledTimes(3)—— 断言总调用次数 - 支持链式调用:
expect(fn).toHaveBeenCalledTimes(1).toHaveBeenCalledWith('test')
注意:必须是实际被调用的 mock 函数才会有记录
如果函数没被执行(比如条件未满足、逻辑跳过),mock.calls 就是空数组,length 为 0。确保测试中确实触发了目标调用路径。
另外,jest.fn() 默认返回 undefined,如需控制返回值,可用 mockReturnValue() 或 mockImplementation()。

















