【问题标题】:How to properly test promises如何正确测试 Promise
【发布时间】:2020-10-05 13:59:13
【问题描述】:

我在 React 应用中使用 Jest 和 React-testing-library 进行了测试:

it('promise test', () => {
    const promise = new Promise<string>(resolve => setTimeout(() => resolve('foo'), 1000))
    expect.assertions(1);
    expect(promise).resolves.toBe('foo');
});

如果我运行测试,我会收到消息:

Error: expect.assertions(1)
Expected :1
Actual   :0 

我的问题是.. 为什么expect(promise).resolves.toBe('foo') 中的代码没有被调用?如何测试这个异步承诺?

【问题讨论】:

  • 也许dataSources.use 抛出了一个错误,而你没有发现它
  • 没有发生。我尝试将 await Promise 重写为 dataSources.use&lt;string&gt;('test').then(value =&gt; console.log('Value', value)).catch(reason =&gt; console.log('Reason', reason)); 仍然没有
  • 你可以试试expect(promise).to.be.resolvedWith('foo') 吗?

标签: reactjs jestjs react-testing-library


【解决方案1】:

正确的解决方案是:您必须使匿名函数异步并等待响应。

it('promise test', async () => {
    const promise = new Promise<string>(resolve => setTimeout(() => resolve('foo'), 1000))
    expect.assertions(1);
    await expect(promise).resolves.toBe('foo')
});

或者这样

it('promise test', async () => {
    const promise = new Promise<string>(resolve => setTimeout(() => resolve('foo'), 1000))
    expect.assertions(1);
    await promise;
    promise.then(value => {
        expect(value).toBe('foo');
    })
});

【讨论】:

    猜你喜欢
    • 2020-04-10
    • 2014-12-21
    • 2018-04-17
    • 1970-01-01
    • 2018-01-10
    • 1970-01-01
    • 1970-01-01
    • 2020-01-05
    相关资源
    最近更新 更多