我正在为async-await函数编写一个简单的jest测试,该函数使用try-catch样式语法;
不幸的是,该函数没有返回响应;我知道我错过了一些非常愚蠢的东西。我可以使用额外的一双眼睛。
PS:大多数互联网资源都集中在普通的异步等待,但并没有多少关注async-await-try-catch;因此询问SO。
async justAnotherAsyncAwait () {
try {
console.log(`inside async await`);
return Promise.resolve('HIIII');
} catch (error) {
return Promise.reject(error);
}
}
expect(justAnotherAsyncAwait()).resolves.toEqual('HIIII')
控制台读取inside async-await
const justAnotherAsyncAwait = async () => {
try {
console.log(`inside async await`);
return await Promise.resolve('HIIII');
} catch (error) {
return Promise.reject(error);
}
}
describe('simple async await test', () => {
it('resolve HIIII', () => {
expect(justAnotherAsyncAwait()).resolves.toEqual('HIIII')
});
});
resolves
和rejects
都要求你要么返回Promise
:
test('justAnotherAsyncAwait', () => {
// return the Promise
return expect(justAnotherAsyncAwait()).resolves.toBe('HIIII'); // Success!
});
...或使用async
测试函数并在await
上调用Promise
:
test('justAnotherAsyncAwait', async () => { // <= async test function
// await the Promise
await expect(justAnotherAsyncAwait()).resolves.toBe('HIIII'); // Success!
});
另一个说明:
async
函数总是返回一个Promise
,它返回的Promise
将解析为返回的值,如果抛出Error
,则使用Error
拒绝,因此通常不需要在try / catch
函数体中使用async
。
这是一个简单的例子:
const func = async (arg) => {
if (arg === 'pass') {
return 'HIIII';
}
throw new Error('something bad happened');
}
test('justAnotherAsyncAwait', async () => {
await expect(func('pass')).resolves.toBe('HIIII'); // Success!
await expect(func()).rejects.toThrow('something bad happened'); // Success!
});