【发布时间】:2014-05-26 07:58:48
【问题描述】:
在我的测试中使用暂停包处理异步调用时,我想以更“干”的方式编写规范。比如下面的代码
it('works like fifo queue', function(done) {
suspend.run(function*() {
yield transport.enqueue({a:1});
yield transport.enqueue({b:1});
(yield transport.dequeue()).should.eql({a: 1});
(yield transport.dequeue()).should.eql({b: 1});
}, done);
});
可以简化为:
it('works like fifo queue', function*() {
yield transport.enqueue({a:1});
yield transport.enqueue({b:1});
(yield transport.dequeue()).should.eql({a: 1});
(yield transport.dequeue()).should.eql({b: 1});
});
如何覆盖 mocha 中的“it”函数来包装生成器函数?
【问题讨论】:
-
为什么可以简化成那样?
-
我相信它可以。虽然我不知道覆盖“it”功能的正确点是什么。类似于:var originalIt = XXX.it; XXX.it = function(title, gen) { originalIt(title, suspend.run(gen, done); }
-
suspend本身也返回一个函数,所以你可以这样做it('...', suspend(function*(){ ... })); -
@loganfsmyth 这行不通。它将导致所有测试成功,因为不会出现异常。所以你需要通过 done 函数来挂起,它使每个测试用例的代码变得复杂。
-
@IgorS。它将捕获异常,然后将它们作为第一个参数传递给
done。it('should fail', suspend(function * (){ throw new Error("FAILED"); }));对我来说失败了。
标签: node.js generator mocha.js yield suspend