gpt4 book ai didi

javascript - 如何检查多个 chai-http 请求何时真正在 block 之前的 mocha 中完成?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:59:39 25 4
gpt4 key购买 nike

我在一组 mocha 单元测试中使用了一个 before block ,并在其中迭代了一组调用以从 REST API 获取信息。我正在使用 chai-http 来执行此操作。但是,我遇到了在我发出的一系列 n 请求完成之前调用 done() 方法的问题。在结束 block 中调用 done 会导致多个 done() 调用,但放在 block 外意味着它在我真正完成之前被调用!这是一个 before block 的示例:

var flags = [];
var groups = [];

// This functions correctly 1 done() called at the end
before(function(done) {
chai.request(server)
.get('/groups')
.end(function(err, res){
groups = JSON.parse(res.text);
done();
});
});

before(function(done) {
groups.forEach(function(rec) {
chai.request(server)
.get('/groups/' + rec.KEYWORD_GROUP_ID + '/groupflags')
.end(function(res, err) {
Array.prototype.push.apply(flags, JSON.parse(res.text));
// A done() here gets called n times
});
// But here it's called before the requests all end
done();
});

有没有一种方法可以检测所有这些请求何时完成,然后我可以调用一个 done() 来确保我的测试只在正确的上下文设置下执行?

最佳答案

您可以尝试使用 async.whilst()。计算 groups.length 的计数器,然后在回调中点击 done()。函数文档链接:( http://caolan.github.io/async/docs.html#whilst )

有点像……

let counter = 0;
async.whilst(
() => {
// Test if we have processed all records
return counter < groups.length;
},
(callback) => {
let rec = groups[counter++]; // Sorry Douglas
chai.request(server)
.get('/groups/' + rec.KEYWORD_GROUP_ID + '/groupflags')
.end(function (res, err) {
Array.prototype.push.apply(flags, JSON.parse(res.text));
callback(null, counter);
});
},
(err) => {
assert(!err, err);
done();
}
);

关于javascript - 如何检查多个 chai-http 请求何时真正在 block 之前的 mocha 中完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43533482/

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