Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在异常情况下使用产量生成器测试chai_Javascript_Testing_Mocha.js_Chai - Fatal编程技术网

Javascript 如何在异常情况下使用产量生成器测试chai

Javascript 如何在异常情况下使用产量生成器测试chai,javascript,testing,mocha.js,chai,Javascript,Testing,Mocha.js,Chai,我正在尝试测试一个应始终引发异常的生成器: function* failureFunc() { yield* getThing('blabla'); //throws an error } 如何正确构建chai expect/should表达式? 到目前为止,我还没有找到一个适合我的表达方式: chai.expect(yield* failureFunc()).to.throw(Error); chai.expect(yield* failureFunc()).to.be.rejected

我正在尝试测试一个应始终引发异常的生成器:

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生成器函数。 似乎什么都不管用。
不确定构建此表达式的正确方法。

必须迭代生成器。以下是您可以做到这一点的方法:

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只有在生成器完成迭代后才能解析,因此这确保它可以遍历所有迭代