Javascript 玩笑嘲弄承诺方法调用错误次数
作为redux操作的一部分,它会发出几个连续的api请求。Javascript 玩笑嘲弄承诺方法调用错误次数,javascript,rest,typescript,promise,jestjs,Javascript,Rest,Typescript,Promise,Jestjs,作为redux操作的一部分,它会发出几个连续的api请求。apiCall方法返回一个带有某个值的承诺,该值被后续的apiCall用于发出另一个请求,依此类推。我正在使用Jest测试这些api调用 const myAPI={ apiCall(参数:任意):承诺{ 返回新承诺((解决、拒绝)=>{ 解决(“结果”); }); }, }; const serialAPIRequests=()=>{ myAPI.apiCall('first_param')) 。然后((结果)=>{ 控制台日志(结果)
apiCall
方法返回一个带有某个值的承诺,该值被后续的apiCall
用于发出另一个请求,依此类推。我正在使用Jest测试这些api调用
const myAPI={
apiCall(参数:任意):承诺{
返回新承诺((解决、拒绝)=>{
解决(“结果”);
});
},
};
const serialAPIRequests=()=>{
myAPI.apiCall('first_param'))
。然后((结果)=>{
控制台日志(结果);
返回myAPI.apiCall(结果);
})
。然后((结果)=>{
控制台日志(结果);
返回myAPI.apiCall(结果);
})
。然后((结果)=>{
控制台日志(结果);
返回承诺。解决(结果);
});
};代码>承诺是异步的,所以当您检查mock是否实际被调用过一次时
你可以这样做。等待所有调用完成,并返回承诺以指示测试是异步的
return serialAPIRequests().then(() => {
expect(myAPI.apiCall).toHaveBeenCalledTimes(3);
})
使用async/await测试异步代码。请在此处阅读更多信息:
在你的承诺链中总是有一个捕获条款。
describe.only('my test', () => {
it('should test api stuff', async () => {
myAPI.apiCall = jest.fn()
.mockReturnValueOnce(Promise.resolve('result1'))
.mockReturnValueOnce(Promise.resolve('result2'))
.mockReturnValueOnce(Promise.resolve('result3'));
await serialAPIRequests();
expect(myAPI.apiCall).toHaveBeenCalledTimes(3);
});
});