Mocha - 断言异步函数抛出异常

Mocha - Assert asynchronous function throws exception

我正在尝试测试 async 函数是否会抛出异常,但我一直收到此错误:

AssertionError: expected [Function] to throw an error

我正在使用 Mocha 和 Chai 的断言库。

it('Throw an error', async () => {
    assert.throws(async () => {
        await retrieveException();
    }, Error);

    const retrieveException = async () => {
        // code snippit
        throw new Error('This is an error');
    }
}

我在检查抛出的异常、异步性质或两者时做错了什么吗?

参考资料

我看过以前的问题 here(其中一个答案通过三个不同的库 [断言和两个 BDD 方法]),但我无法解决问题。

This article 也没什么用。

也不是 Node.js 中的 documentation article

expect().to.throw(Error) 仅适用于同步功能。如果您想要使用异步函数的类似功能,请查看 chai-as-promised

例如

import chai, { assert } from 'chai';
import chaiAsPromised from 'chai-as-promised';

chai.use(chaiAsPromised);

describe('63511399', () => {
  it('Throw an error', async () => {
    const retrieveException = async () => {
      throw new Error('This is an error');
    };
    return assert.isRejected(retrieveException(), Error);
  });
});

单元测试结果:

  63511399
    ✓ Throw an error


  1 passing (29ms)

在 Node JS sins v10.0.0 中有:

assert.rejects(asyncFn[, error][, message])

用于检查异步函数中的异常,

使用 Mocha 时,它看起来像这样:

it('should tests some thing..', async function () {
  await assert.rejects(async () => {
    throw new Error('This is an error')
  }, 'Error: This is an error')
})