【问题标题】:How would you test a method that returns a promise using Jest您将如何使用 Jest 测试返回承诺的方法
【发布时间】:2019-08-04 23:28:22
【问题描述】:

我想知道如何用 jest 测试一个返回 promise 并解析另一个方法的方法。

例如:-

    getUser() {
    const getListFromDatabase= this.getListFromDatabase.bind(this);
    const getListFromUser= this.getListFromUser.bind(this);
    return new Promise((resolve) => {
      const myList = Cookies.get('myList');
      if (myList) {
        resolve(myList);
      } else if (CONFIGURATION.ENABLED) {
        resolve(getListFromDatabase());
      } else {
        resolve(getListFromUser());
      }
    });
  },

getListFromDatabasegetListFromUser 是我的主要对象中的其他方法。

getUser() 是我的主要对象中的一个方法。

所以现在我想用 jest 编写一个单元测试,测试如果找到 cookie,我们解析了一个数组 (myList),如果启用了全局配置变量,我们解析了 getListFromDatabase(),否则 getListFromUser()

我返回一个可以解决的新承诺这一事实让我很困惑该走哪条路,expect().resolvesgetUser().then(data => expect(data)..)

【问题讨论】:

  • 你可以让测试异步并等待它测试最终结果。

标签: javascript reactjs jestjs es6-promise


【解决方案1】:

您可以使用flush-promises 使promise 解析,然后您无需等待promise。

例子:

test('flushPromises', async () => {
  let a;
  let b;

  Promise.resolve().then(() => {
    a = 1;
  }).then(() => {
    b = 2;
  })

  await flushPromises();

  expect(a).toBe(1);
  expect(b).toBe(2);
});

【讨论】:

  • 如何使用它来测试我的方法?我没有看到任何关系。
  • 我们可以远离异步并等待吗?
  • 它只是合成糖 await 和 async - 工作方式与 promise 相同
  • 只需添加 flushPromises().then(expect("what you want to test"));
猜你喜欢
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-23
  • 2019-03-11
  • 2021-02-20
相关资源
最近更新 更多