Jest中jest.fn()传回调与jest.fn().mockImplementation()有什么区别?
Jest两种模拟函数写法的区别
首先直接给出结论:这两种写法没有任何功能差异,jest.fn(callback)就是jest.fn().mockImplementation(callback)的简化语法糖。
Jest官方在设计jest.fn接口时,就把可选的回调参数作为默认模拟实现的快捷入口:当你给jest.fn传入一个函数作为参数时,Jest内部会自动调用mockImplementation方法将这个函数绑定为模拟函数的实现,两种写法最终生成的模拟函数返回值、调用记录、mock属性完全一致。
两种写法的适用场景区分:
- 如果你创建模拟函数的时候就已经确定了默认实现,直接用
jest.fn(() => 'something')写法更简洁,适合绝大多数常规模拟场景 - 如果你需要先创建空的模拟函数,后续再动态修改它的实现(比如不同测试用例需要不同返回值),才需要单独调用
mockImplementation,示例如下:
// 先创建无默认实现的模拟函数 const mockQuery = jest.fn() test('第一个测试场景', () => { mockQuery.mockImplementation(() => ({ success: true, data: 1 })) // 执行测试逻辑 }) test('第二个测试场景', () => { mockQuery.mockImplementation(() => ({ success: false, error: 'network err' })) // 执行测试逻辑 })
内容的提问来源于stack exchange,提问作者hamobi
相关产品推荐
相关产品推荐

