Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.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模拟API调用?_Javascript_Jestjs_Axios - Fatal编程技术网

Javascript 如何开玩笑地用axios模拟API调用?

Javascript 如何开玩笑地用axios模拟API调用?,javascript,jestjs,axios,Javascript,Jestjs,Axios,我是测试新手,我对用ES6类模拟API和axios实例有一些疑问 我有一个索引.js: 从“axios”导入axios; 导出默认类Pushkin{ 构造函数(){ this.con=未定义; } 连接(quizAPIUrl){ this.con=axios.create({ baseURL:quizAPIUrl, }); } 预运行(用户ID){ 常量postData={ 用户id:userID, }; 返回此.con.post('/startExperiment',postData); }

我是测试新手,我对用ES6类模拟API和axios实例有一些疑问

我有一个
索引.js

从“axios”导入axios;
导出默认类Pushkin{
构造函数(){
this.con=未定义;
}
连接(quizAPIUrl){
this.con=axios.create({
baseURL:quizAPIUrl,
});
}
预运行(用户ID){
常量postData={
用户id:userID,
};
返回此.con.post('/startExperiment',postData);
}
// ......

}
那是因为你没有模仿你的
create()
方法,对吗

axios.create.mockImplementation(()=>Promise.resolve(quizURL))

这只会给出一个不包含
post()
方法的
Promise
返回。因此,当然,它将“不是一个函数”

一种解决方案是,您可以使用post方法模拟对象:

axios.create.mockImplementation(() => { get: () => {...} });
另一种可能更聪明但我没有测试的方法就是它本身

axios.create.mockImplementation(() => axios);

...

axios.post.mockImplementation(() => Promise.resolve(postData));

我不会测试axios的
post()
——可以安全地假设它可以正常工作。测试是否使用正确的参数调用了
post()
。@Yorkshireman您能更具体地告诉我怎么做吗?谢谢类似于
expect(mockCallback.mock.calls[0][0]).toBe(42)
调用[0][0]
就是您所调用的
mockCallback()
,特别是第一次调用的第一个参数)我将避开“模拟axios的行为,然后测试模拟的行为”,这基本上就是这里所做的。当然,mock的
get
post
方法将返回数据-您已经对mock进行了编程,可以这样做。