我正在写一个摩卡测试记者,将测试结果转储到elasticsearch中。 Mocha会为suite
,pass
,fail
以及可以订阅的其他人发布活动。
发布事件时,我使用elasticsearch.js
发出一个承诺,以在elasticsearch中创建文档。我把它包起来就好......
function addResult(result)
{
return client.create({
index: index_name,
type: document_type,
body: result
});
}
如果套件提前退出并且没有运行剩余的测试,则Mocha不会为剩余的测试发出defered
事件。我的解决方案是在suite
事件上创建一系列测试,并在完成后将其删除。如果suite end
事件中还有任何内容,我会将这些承诺发布到elasticsearch作为bailouts
。
runner.on('suite end', function (done)
{
/*
* If the suite bailed out early and didn't run some of it's tests,
* we want to make sure we track them as skipped.
*/
if (remainingTests.length != 0)
{
console.log(' Suite ended with ' + remainingTests.length + ' tests remaining');
remainingTests.forEach(function (skipped_test) {
elastic.addResult(skipped_test)
.then(function (response) {
if (response.created) { console.log(' Result added to ES') }
else { console.error("Error adding to ES: " + response); }
})
.catch(function (err) {
console.log('ERROR: ' + err);
});
}); // end forEach
} // end if
}); // end...suite end
问题是该过程在没有履行bailouts
的所有承诺的情况下结束,我找不到强迫它等待的方法。
我尝试创建所有承诺的数组并调用
Promises.all()
没有运气。
我也试过setTimeout
而没有运气。