Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在这种情况下,测试axios函数的正确方法是什么?_Javascript_Reactjs_Typescript_Jestjs_Axios - Fatal编程技术网

Javascript 在这种情况下,测试axios函数的正确方法是什么?

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 |

我已经编写了一个基本测试用例来测试我的axios功能。测试用例失败了。我正在尝试测试一个axios调用,它会给我一个json。我格式化数据并解析Promise函数。 jest给出错误,
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
它更简单更干净。它的作用也完全相同。