Javascript 如何开玩笑地用axios模拟API调用?
我是测试新手,我对用ES6类模拟API和axios实例有一些疑问 我有一个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); }
索引.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进行了编程,可以这样做。