gpt4 book ai didi

node.js - 使用 "it"覆盖 mocha "yield"以支持 "suspend"

转载 作者:太空宇宙 更新时间:2023-11-04 01:06:07 25 4
gpt4 key购买 nike

在我的测试中使用挂起包处理异步调用时,我想以更“干”的方式编写规范。例如下面的代码

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 功能是全局的。所以这就是我最终解决的方法

// 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
...
});
});

关于node.js - 使用 "it"覆盖 mocha "yield"以支持 "suspend",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23024847/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com