You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何mock函数返回的实例方法?基于simple-git的Jest mock场景问题

simple-git Jest 正确Mock方案

错误原因

你之前的Mock写法不符合simple-git的导出逻辑:simple-git默认导出的是工厂函数,需要先执行simpleGit()得到git实例后,实例上才挂载tag这类操作方法,你直接给导出对象加tag方法自然无法匹配调用逻辑。

正确Mock写法

jest.mock('simple-git', () => {
  // 构造Mock的git实例,所有用到的git方法都可以在这里定义为Mock函数
  const mockGitInstance = {
    // 可根据测试需求自定义tag方法的返回值
    tag: jest.fn().mockResolvedValue('测试用标签哈希值')
  }
  // 导出Mock后的工厂函数,调用后返回上面构造的Mock实例
  return jest.fn(() => mockGitInstance)
})

测试用例示例(验证调用参数/自定义返回值)

import simpleGit from 'simple-git'
import { foo } from '你的业务代码路径'

// 提前获取Mock的tag方法,方便后续断言
const mockTag = simpleGit().tag

test('foo 函数调用git.tag参数符合预期', async () => {
  // 单独给当前测试用例设置自定义返回值
  mockTag.mockResolvedValue('a1b2c3\nd4e5f6')
  
  await foo()
  
  // 验证tag方法调用时传入的参数是否正确
  expect(mockTag).toHaveBeenCalledWith({
    '--list': null,
    '--format': '%(objectname:short)'
  })
})

如果后续你用到了simple-git的其他方法(比如commit、pull等),直接在mockGitInstance对象里添加对应的jest.fn()Mock函数即可,按需配置返回值。

内容的提问来源于stack exchange,提问作者user3142695

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 14:06:04