使用 Chai expect throw 无法捕获承诺拒绝

Fed*_* E. 3 mocha.js node.js chai

我已经搜索了如何解决这个问题,但我测试的所有解决方案都不适用于我的情况。

我有一个返回承诺的函数,我正在尝试使用 Mocha 和 Chai 进行测试。

我正在模糊参数,所以函数总是返回:

拒绝('拒绝原因')

这是我尝试运行的测试:

describe('fuzzing tokenization with 1000 invalid values', () => {

   it('should throw an error - invalid value', async () => {

      for(var i=0; i <= 1000; i++){

          var req = {
              body: {
                  value: fuzzer.mutate.string('1000000000000000')
              },
              user: {
                  displayName: user
              }
          };

          expect(await tokenizer.tokenize(req)).to.throw(Error);

      }

   });

});
Run Code Online (Sandbox Code Playgroud)

测试失败:

错误:字符串“无效值”。被抛出,抛出一个错误:)

我测试了几个变化,比如将期望包装成一个函数

expect(async () => { ...}).to.throw(Error);

和其他我发现谷歌搜索。但我无法让它发挥作用。

我错过了什么?

lle*_*eon 10

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

import chaiAsPromised from 'chai-as-promised';
import chai from 'chai';

chai.use(chaiAsPromised)
var expect = chai.expect;

describe('fuzzing tokenization with 1000 invalid values', () => {
  it('should throw an error - invalid value', async () => {
    for (var i = 0; i <= 1000; i++) {
      var req = {
        body: {
          value: fuzzer.mutate.string('1000000000000000')
        },
        user: {
          displayName: user
        }
      };

      await expect(tokenizer.tokenize(req)).to.eventually.be.rejectedWith(Error);
    }
  });
});
Run Code Online (Sandbox Code Playgroud)