我有这个对象:
import keys from './keys'
const obj = {
getData: async funcion(url) {
const key = await keys.getAccess()
return get(url, {
secret: key
}
})
}
}
我想嘲笑key
具有模拟值的变量。我试过:
test('test', async() => {
const spyD = jest.spyOn(obj, 'getData');
expect(obj.getData).toHaveBeenCalledWith('/url', {secret: 'my mocked key') //but secret is undefined
})
...但我不能嘲笑key
多变的。如何从我的函数中模拟该变量?
你不能直接;作用域是封闭的,无法访问其中声明的变量。您可以传入创建的函数key
相反,您可以模拟它的实现,同时传递原始函数作为默认值:
const obj = {
getData: async function(url, getAccess = keys.getAccess) {
const key = await getAccess()
return get(url, {
secret: key
}
})
}
}
test('test', async () => {
const spyD = jest.spyOn(obj, 'getData');
const result = await obj.getData("/url", async () => "my mocked key");
expect(spyD).toHaveBeenCalledWith("/url");
})
该测试现在应该通过了,并且result
将是返回值get
打电话给"/url"
and {secret: "my mocked key"}
.
或者,如果您不想修改obj
,你可以模拟执行getData
完全得到相同的结果:
test('test', async () => {
const spyD = jest.spyOn(obj, 'getData').mockImplementation(async (url) => {
return get(url, {secret: "my-mocked-key"})
});
const result = await obj.getData("/url");
expect(spyD).toHaveBeenCalledWith("/url");
})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)