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

Jest测试时如何mock对象方法内部由依赖生成的key变量

问题原因

你的实现存在以下错误点:

  • 你通过jest.spyOn监听的是obj.getData本身,无法直接干预函数内部作用域定义的私有变量key
  • key的取值完全依赖./keys模块导出的getAccess异步方法的返回值,你没有对这个依赖方法做mock,所以运行时key要么是真实返回值要么是undefined,无法拿到你要的模拟值
  • 你的测试代码没有主动调用obj.getData就直接断言方法被调用,且expect语句的参数括号不匹配,本身存在语法错误
  • 额外注意你给出的业务代码里getData的定义拼写错误:funcion应该改为function,否则代码无法正常运行
正确实现方案

直接mockkeys.getAccess的返回值即可,测试代码示例如下:

// 引入对应模块
import keys from './keys'
import obj from './你存放obj对象的文件路径'
// 假设get方法来自第三方包或者自定义模块,先做全局mock
import get from 'axios' // 替换为你实际的get方法来源
jest.mock('axios') // 替换为你实际的get方法来源

test('test', async () => {
  // 1. mock getAccess方法的返回值为指定的模拟key
  const getAccessSpy = jest.spyOn(keys, 'getAccess').mockResolvedValue('my mocked key')
  // 2. 主动调用getData触发内部逻辑执行
  await obj.getData('/url')
  // 3. 断言get方法被调用时传入了正确的secret参数
  expect(get).toHaveBeenCalledWith('/url', { secret: 'my mocked key' })
  // 可选:恢复getAccess的原始实现,避免影响其他测试用例
  getAccessSpy.mockRestore()
})
补充说明

如果你不需要监听get方法的调用,也可以直接断言getData的返回结果是否符合预期,无需额外mockget方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 23:54:00