柴无法使用async / await捕获引发的错误

时间:2020-06-26 14:29:45

标签: javascript node.js async-await try-catch chai

因为兑现了承诺,Chai没有捕获到异常,我该如何解决?

这是我的考试。

describe('test.js', function() {
    it('Ensures throwError() throws error if no parameter is supplied.', async function() {
        expect(async function() {
            const instance = new Class();
            await instance.throwError();
        }).to.throw(Error);
    });
});

这是我的代码。

class Class{
    async throwError(parameter) {
        try {
            if (!parameter) {
                throw Error('parameter required');
            }
        } catch (err) {
            console.log(err);
        }
    }
}

柴的消息。

AssertionError: expected [Function] to throw Error

但是我可以在调用堆栈上看到此消息。

(node:21792) UnhandledPromiseRejectionWarning: Error: Error: parameter required

1 个答案:

答案 0 :(得分:1)

expect().to.throw()仅支持同步功能。对于异步功能,您需要使用chai-as-promised

例如

index.js

export class Class {
  async throwError(parameter) {
    if (!parameter) {
      throw Error('parameter required');
    }
  }
}

index.test.js

import chai, { expect } from 'chai';
import chaiAsPromised from 'chai-as-promised';
import { Class } from '.';

chai.use(chaiAsPromised);

describe('62596956', function() {
  it('Ensures throwError() throws error if no parameter is supplied.', async function() {
    const instance = new Class();
    await expect(instance.throwError(null)).to.eventually.rejectedWith(Error);
  });
});

单元测试结果:

  62596956
    ✓ Ensures throwError() throws error if no parameter is supplied.


  1 passing (9ms)

----------|---------|----------|---------|---------|-------------------
File      | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
----------|---------|----------|---------|---------|-------------------
All files |     100 |       50 |     100 |     100 |                   
 index.ts |     100 |       50 |     100 |     100 | 3                 
----------|---------|----------|---------|---------|-------------------