如何正确地测试承诺
How to properly test promises
我使用 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')
中的代码?如何测试这个异步承诺?
正确的解决方案是:您必须使匿名函数异步并等待响应。
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');
})
});
我使用 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')
中的代码?如何测试这个异步承诺?
正确的解决方案是:您必须使匿名函数异步并等待响应。
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');
})
});