Javascript 在“上模拟一个方法”;这";开玩笑

Javascript 在“上模拟一个方法”;这";开玩笑,javascript,unit-testing,jestjs,vuex,nuxt.js,Javascript,Unit Testing,Jestjs,Vuex,Nuxt.js,我有以下实施: 导出常量操作={ 异步submitPhoneNumber(上下文){ 让data=等待此操作。$axios。 $get('https://jsonplaceholder.typicode.com/todos/1') //处理数据 返回数据 } } 当我运行测试时,我得到 TypeError:无法读取未定义的属性“$get” 如何模拟此。$axios.$get 我开玩笑地看了mockingglobal,但是mockingglobal只是一个mocking窗口 我需要模拟这个对象

我有以下实施:

导出常量操作={
异步submitPhoneNumber(上下文){
让data=等待此操作。$axios。
$get('https://jsonplaceholder.typicode.com/todos/1')
//处理数据
返回数据
}
}
当我运行测试时,我得到

TypeError:无法读取未定义的属性“$get”

如何模拟
此。$axios.$get

我开玩笑地看了mocking
global
,但是mocking
global
只是一个mocking窗口

我需要模拟
这个
对象

这是我的测试:

从'@/store/channel add'导入{actions}
从“flush promises”导入flushPromises
描述('channel-add',()=>{
它('提交电话号码并返回电话代码哈希',异步()=>{
让数据=等待操作。submitPhoneNumber()
等待flushPromises()
expect(data.toBeTruthy())
})
})
以下是解决方案:

index.ts

导出常量操作={
//我不知道你从哪里得到$axios,你没有给出完整的代码。所以我为演示做了一个假的。
$axios:{
$get:url=>“”
},
异步submitPhoneNumber(上下文){
让data=等待此操作。$axios.$get('https://jsonplaceholder.typicode.com/todos/1');
//处理数据
数据=此.processData(数据);
返回数据;
},
//演示
processData(数据){
返回数据;
}
};
索引规范ts

从“/”导入{actions};
动作。$axios={
$get:jest.fn()
};
描述('动作',()=>{
它('should mock action.$axios.$get method',()=>{
expect(jest.isMockFunction(actions.$axios.$get)).toBeTruthy();
});
它('应该正确获取数据',异步()=>{
(actions.$axios.$get as jest.Mock).mockResolvedValueOnce({userId:1});
const actualValue=await actions.submitPhoneNumber({});
expect(actualValue).toEqual({userId:1});
expect(actions.$axios.$get).toBeCalledWith('https://jsonplaceholder.typicode.com/todos/1');
});
});
单元测试结果:

传递src/mock module/axios/index.spec.ts
行动
✓ 应模拟动作。$axios.$get方法(4ms)
✓ 应正确获取数据(4ms)
测试套件:1个通过,共1个
测试:2次通过,共2次
快照:共0个
时间:2.181s,估计3s