首页 > 解决方案 > 如何正确测试 Promise

问题描述

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

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')不调用代码?如何测试这个异步承诺?

标签: reactjsjestjsreact-testing-library

解决方案


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

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

推荐阅读