在我的测试中使用suspend包处理异步调用时,我想在更多" DRY"中编写规范。办法。例如,以下代码
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函数包装生成器函数?
答案 0 :(得分:1)
确定。好像它的功能是全局的。所以这就是我最终解决的问题
// spec_helper.js
var suspend = require('suspend');
// Add suspend support to "it-blocks"
var originalIt = it; // remember the original it
it = function(title, test) { // override the original it by a wrapper
// If the test is a generator function - run it using suspend
if (test.constructor.name === 'GeneratorFunction') {
originalIt(title, function(done) {
suspend.run(test, done);
});
}
// Otherwise use the original implementation
else {
originalIt(title, test);
}
}
然后在测试套件中执行:
require('spec_helper');
describe("Something", function() {
it ("Supports generators", function*() {
// Use yields here for promises
...
});
it ("is compatible with regular functions", function() {
// Can't use yields here
...
});
});
答案 1 :(得分:0)
我已经通过Igor S.尝试了解决方案,但它确实有效。
但是,我还发现有两个节点模块声称可以通过安装它们来解决这个问题:
我尝试了后者,它也有效。也许安装软件包比编写自定义代码更容易,尽管理想的解决方案是mocha支持开箱即用。