如何使用 yield generator 异常测试 chai
How to test chai with yield generator with exception
我正在尝试测试一个应该总是抛出异常的生成器:
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-generator 函数。
似乎没有任何效果。
不确定构建此表达式的正确方法是什么。
您必须迭代生成器。您可以通过以下方式做到这一点:
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
将生成器转换为一个 returns 承诺的函数,并检查该承诺是否被拒绝。由于 promise 仅在生成器完成迭代后才解析,这确保它遍历所有迭代。
我正在尝试测试一个应该总是抛出异常的生成器:
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-generator 函数。 似乎没有任何效果。 不确定构建此表达式的正确方法是什么。
您必须迭代生成器。您可以通过以下方式做到这一点:
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
将生成器转换为一个 returns 承诺的函数,并检查该承诺是否被拒绝。由于 promise 仅在生成器完成迭代后才解析,这确保它遍历所有迭代。