无法从Jest测试中获得async-await-try-catch函数的响应

问题描述 投票:0回答:2

我正在为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

javascript unit-testing ecmascript-6 async-await jestjs
2个回答
0
投票
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')
  });
});

0
投票

resolvesrejects都要求你要么返回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!
});
© www.soinside.com 2019 - 2024. All rights reserved.