javascript - 开 Jest mock promise 方法调用错误次数

标签 javascript rest typescript promise jestjs

作为我的 redux 操作的一部分,它发出了几个顺序的 api 请求。 apiCall 方法返回一个具有某个值的 Promise,随后的 apiCall 使用该值来发出另一个请求,依此类推。我正在使用 Jest 来测试这些 api 调用。

const myAPI = {
  apiCall(param: any): Promise<any> {
    return new Promise((resolve, reject) => {
      resolve('result');
    });
  },
};

const serialAPIRequests = () => {
  myAPI.apiCall('first_param')
    .then((result) => {
      console.log(result);
      return myAPI.apiCall(result);
    })
    .then((result) => {
      console.log(result);
      return myAPI.apiCall(result);
    })
    .then((result) => {
      console.log(result);
      return Promise.resolve(result);
    });
};

我正在尝试编写一个测试以确保 apiCall 被调用的次数正确且参数正确。

describe.only('my test', () => {
  it('should test api stuff', () => {
    myAPI.apiCall = jest.fn()
      .mockReturnValueOnce(Promise.resolve('result1'))
      .mockReturnValueOnce(Promise.resolve('result2'))
      .mockReturnValueOnce(Promise.resolve('result3'));
    serialAPIRequests();
    expect(myAPI.apiCall).toHaveBeenCalledTimes(3);
  });
});

发生的情况是 Jest 报告 Expected mock function to have been called three times,但它被调用了一次。

Jest测试结果表明

  ● Console

console.log 
  result1
console.log 
  result2
console.log 
  result3

 ● my test › should test api stuff

expect(jest.fn()).toHaveBeenCalledTimes(3)

Expected mock function to have been called three times, but it was called one time.

console.log 显示不同值的事实意味着模拟返回已正确通过模拟函数并被调用 3 次。

可能是什么原因造成的,我该如何正确测试这个功能?

最佳答案

使用 async/await 来测试异步代码。在这里阅读更多:https://facebook.github.io/jest/docs/en/tutorial-async.html

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);
      });
    });

关于javascript - 开 Jest mock promise 方法调用错误次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48872197/

相关文章:

rest - 使用 OData 异步创建资源

javascript - Angular 2 登录指令和 location.createComponent

javascript - Google Apps 脚本 - createEvent 函数不创建日历事件

java - 如何在应用程序中组织和管理多个数据库凭据?

javascript - AngularJS 在 ng-change 调用的函数中将属性值作为参数传递

java - Spring 从 Http 重定向到 Https 中断 Rest Controller 测试

angular - 在 TypeScript 中创建 GUID - 函数在 JS 中有效但在 TS 中无效

angular - 类型错误 : Cannot read property 'prototype' of undefined using jest

Javascript 事件操作

javascript - onclick 行为异常 - 刷新页面而不是显示内容