【发布时间】:2015-06-06 12:49:07
【问题描述】:
我有一段代码使用node-sync,如下所示:
function funcA() {
return new Promise(function(resolve, reject) {
Sync(function () {
return funcB.sync();
}, function (err, result) {
if(err) {
reject(err);
} else {
resolve(result);
}
});
}
这段代码是用mocha+chai测试的:
it("should return array", function() {
return funcA().then(function(result) {
expect(result).to.be.an.instanceof(Array);
});
});
几个月前它工作得很好,但现在这个测试总是超时:
错误:超过 2000 毫秒的超时。确保在此测试中调用了 done() 回调。
到目前为止我已经尝试过:
- 使用
done()而不是返回承诺 - 将
node-sync替换为synchronize.js - 增加超时
我发现,这个测试的 expect(... 部分实际上是被调用的,但只是在 mocha 杀死测试之后。无论当前设置什么超时间隔,在我收到 Error: timeout 消息后,expect(.. 总是会被调用约 20 毫秒。
我通过在测试文件顶部添加setInterval(function(){}, 10) 解决了这个问题。 我想知道为什么会这样,是否有更好的方法来解决这个问题?
[编辑] 看起来这是一个特定于节点版本的问题。测试在 0.12.4 上失败,但在 0.10.38 上正常运行。
[编辑] 实际代码可用here。
【问题讨论】:
-
顺便说一句,最好不要在测试中异步运行代码(恕我直言)。我知道您正在尝试运行此块同步,但也许可以尝试 chai-as-promised 模块,以便您可以删除
done