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

