如何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
相关产品推荐
相关产品推荐

