【问题标题】:How to test chai with yield generator with exception如何使用产量生成器测试 chai 异常
【发布时间】:2017-05-05 07:26:55
【问题描述】:

我正在尝试测试一个应该总是抛出异常的生成器:

function* failureFunc() {
  yield* getThing('blabla'); //throws an error
}

我应该如何正确构建 chai expect / should 表达式? 到目前为止,我无法使我尝试过的表达式起作用:

chai.expect(yield* failureFunc()).to.throw(Error);
chai.expect(yield* failureFunc()).to.be.rejectedWith(Error);

还尝试添加一些 chai 生成器功能。 似乎没有任何效果。 不确定构建此表达式的正确方法是什么。

【问题讨论】:

    标签: javascript testing mocha.js chai


    【解决方案1】:

    您必须遍历生成器。以下是您可以做到的方法:

    const chai = require("chai");
    const cap = require("chai-as-promised");
    const Promise = require("bluebird");
    
    chai.use(cap); 
    
    function* failureFunc() {
      yield* getThing('blabla'); // Throws an error, because getThing is not defined.
    }
    
    chai.expect(() => Array.from(failureFunc())).to.throw(Error);
    chai.expect(Promise.coroutine(failureFunc)()).to.be.rejectedWith(Error);
    

    在第一种情况下,我使用Array.from,它将尝试遍历整个生成器。通过这样做,您可以在任何迭代中捕获错误。 (理论上,生成器可以在任何迭代周期中抛出。)您可以使用迭代整个生成器的任何方法。或者,如果您正在测试一个在第一次迭代时会失败的案例,您可以在 () => failureFunc().next() 上进行测试。

    在第二种情况下,我使用 Bluebird 的 Promise.coroutine 将生成器转换为返回承诺并检查承诺是否被拒绝的函数。由于 Promise 仅在生成器完成迭代后才解析,因此可以确保它遍历所有迭代。

    【讨论】:

      猜你喜欢
      • 2013-09-26
      • 2020-07-24
      • 2015-06-02
      • 1970-01-01
      • 2018-08-26
      • 1970-01-01
      • 1970-01-01
      • 2020-11-05
      • 1970-01-01
      相关资源
      最近更新 更多