Javascript 在这种情况下,测试axios函数的正确方法是什么?
我已经编写了一个基本测试用例来测试我的axios功能。测试用例失败了。我正在尝试测试一个axios调用,它会给我一个json。我格式化数据并解析Promise函数。 jest给出错误,Javascript 在这种情况下,测试axios函数的正确方法是什么?,javascript,reactjs,typescript,jestjs,axios,Javascript,Reactjs,Typescript,Jestjs,Axios,我已经编写了一个基本测试用例来测试我的axios功能。测试用例失败了。我正在尝试测试一个axios调用,它会给我一个json。我格式化数据并解析Promise函数。 jest给出错误,TypeError:无法读取未定义的属性“then” ` TypeError:无法读取未定义的属性“then” 67 | 'Authorization': `Bearer ${accessToken}`, 68 | }, > 69 |
TypeError:无法读取未定义的属性“then”
`
TypeError:无法读取未定义的属性“then”
67 | 'Authorization': `Bearer ${accessToken}`,
68 | },
> 69 | }).then((response: any): any => {
| ^
70 | if (response.statusText === "OK") {
71 | return Promise.resolve(response.data);
72 | }
`
模拟/axios.ts
导出默认值{
get:jest.fn(()=>Promise.resolve()),
请求:jest.fn(()=>Promise.resolve())
};
//libHelper.tsx
导出默认类libHelper{
构造函数(){
//参数初始化
}
}
公共fetchMsGraph=(accessToken:string):Promise=>{
返回axios.get(Constants.someURL{
标题:{
“内容类型”:“应用程序/json”,
'Authorization':'Bearer${accessToken}`,
},
}).然后((回答:any):any=>{
如果(response.statusText==“确定”){
返回Promise.resolve(response.data);
}
否则{
返回承诺。拒绝(错误(`API响应不正常`);
}
}).catch((err:any):any=>Promise.reject(Error(`fetchapi Error${err}`));
}
//libHelper-tests.tsx
从“./Scripts/libHelper”导入libHelper;
从“./\uuuuu mocks\uuuuuu/axios”导入axios;
从“./脚本/接口”导入{UserDataGen1,Data};
描述(“,():void=>{
测试(“基本测试”,()=>{
让msalobject:MsalHelper=新的MsalHelper();
expect(msalobject).toBeInstanceOf(msalhelp);
});
测试(“不太基本”,异步()=>{
常量响应:UserDataGen1={
idp:“字符串”,
memberName:“字符串”,
姓氏:“字符串”,
名字:“字符串”,
cid:“字符串”,
authenticatedState:“字符串”,
图片:“字符串”
}
axios.get.mockImplementation(()=>{Promise.resolve(resp);});
让libObject:libHelper=new libHelper();
const rand:Data=await libObject.fetchAPP(“asd”);
预期(兰特)、托夸尔(分别);
});
});
您应该使用mockResolvedValue
:
const resp: UserDataGen1 = {
idp: "string",
memberName: "string",
lastName: "string",
firstName: "string",
cid: "string",
authenticatedState: "string",
picture: "string"
}
axios.get.mockResolvedValue(resp);
这就是成功的原因
import mockAxios from "../__mocks__/axios";
const data: UserDataGen1 = {
idp: "string",
memberName: "string",
lastName: "string",
firstName: "string",
cid: "string",
authenticatedState: "string",
picture: "string"
}
const resp: any = {
data: data,
status: 200,
statusText: "OK",
}
mockAxios.get.mockImplementation((url: string) =>{
console.log(url);
return Promise.resolve(resp);
});
你能给我们看一下axios mock吗?什么是
\uu mocks\uuuu/axios
?你最初的问题是你没有“返回”这一行中的承诺axios.get.mockImplementation(()=>{promise.resolve(resp);})代码>。使用mockResolvedValue
可以避免此类错误。感谢您的回复,现在我收到了一个新错误typescript TypeError:axios_1.default.get(…)。then不是一个函数
对不起,我的意思是mockResolvedValue
。我已经更新了代码。你真的应该使用mockResolvedValue
它更简单更干净。它的作用也完全相同。