【问题标题】:Using Chai expect throw not catching promise rejection使用 Chai 期望 throw 不会捕获 Promise 拒绝
【发布时间】:2018-10-28 22:42:16
【问题描述】:

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

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

我正在对参数进行模糊测试,所以函数总是返回:

reject('拒绝原因')

这是我要运行的测试:

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);

      }

   });

});

测试失败:

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

我测试了一些变化,比如将期望包装到一个函数中

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

还有其他我在谷歌上发现的。但我无法让它工作。

我错过了什么?

【问题讨论】:

    标签: node.js mocha.js chai


    【解决方案1】:

    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);
        }
      });
    });
    

    【讨论】:

    • 啊!当我得到你的答案时,我正在查看那个库。值得一提的是,在我的情况下,在rejectWith() 内部,它应该有拒绝的原因。谢谢!
    • @artze 感谢您的输入,但我发布的代码运行良好。如果它对您不起作用,则可能是由您的 babel 配置或您正在使用的节点版本引起的。问题的作者使用 async/await,所以我在回答中也这样做
    • @lleon 可能还有其他因素导致我的代码失败,所以你可能是对的。我会删除我上面的​​评论
    猜你喜欢
    • 2018-08-26
    • 1970-01-01
    • 1970-01-01
    • 2021-04-21
    • 2019-01-04
    • 2019-07-18
    • 2019-08-10
    • 2018-08-17
    • 1970-01-01
    相关资源
    最近更新 更多