我有一个名为web3
的对象,可以监听事件并用于设置cookie:
import Cookies from 'universal-cookie'
import _ from 'lodash'
const cookies = new Cookies()
const setUserId = () => {
if (_.isUndefined(window.web3)) return
window.web3.currentProvider.publicConfigStore.on(
'update',
({ selectedAddress }) => {
cookies.set('userId', selectedAddress)
}
)
}
export default {
setUserId,
}
我正在尝试进行开玩笑的测试,但我坚持要怎么做:
1)模拟Cookies
2)模拟web3.currentProvider.publicConfigStore.on('update', ...)
有人可以帮忙吗?
答案 0 :(得分:1)
要模拟Cookies
,您需要模拟导入的模块,以便它返回一个函数,该函数使用set
方法(该模拟方法)返回对象。在这种情况下,您只能在JavaScript中使用函数原因,而在类和函数之间并没有真正的区别。
jest.mock('universal-cookie', ()=> jest.fn())
import Cookie from 'universal-cookie'
const setCookie = jest.fn()
Cookie.mockImplementation(()=> ({set: setCookie}))
如果您不需要检查set
函数,也可以在一行中进行模拟:
jest.mock('universal-cookie', ()=> ()=> ({set: jest.fn()})
要访问全局名称空间中的任何内容,例如window
,可以在玩笑中使用global
关键字来访问它。在此您可以添加任何您想要的内容;
const on = jest.fn()
global.web3 = {
currentProvider: {
publicConfigStore: {
on
}
}
}
最后一步是使用mock.calls
调用传递给on
的回调
on.mock.calls[0][1]({selectedAddress: 'someAddress'})