Javascript 玩笑嘲弄承诺方法调用错误次数

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')) 。然后((结果)=>{ 控制台日志(结果)

作为redux操作的一部分,它会发出几个连续的api请求。
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);
      });
    });