【发布时间】:2014-04-09 14:53:04
【问题描述】:
我正在我的 Node 应用程序中进行一些集成测试,并在我的代码中的某个位置调用以下函数:
async.parallel([
function foo(callback){
setTimeout(function(){
//DO SOMETHING HERE;
callback(null, result);
}, 500);
},
function bar(callback){
//DO SOMETHING HERE;
callback(null, result);
}],
function(err, results){
//Process results here and continue
});
此代码是较大节点应用程序的一部分。
现在,当我尝试使用 Mocha 测试我的代码时,测试挂起,因为 foo() 中的超时永远不会触发,因此并行执行永远不会完成。当我删除 setTimeout 时,执行完成就好了。
这是测试代码:
it("test something", function(done) {
request(app)
.post(requestUrl)
.send(testRequest)
.expect(200)
.end(function(err, res){
(res.body.text).should.equal('Hello World');
done();
});
});
我尝试了什么: 显然,在测试过程中时钟被禁用了,所以我尝试使用诗乃来模拟时间的流逝,但无济于事。
我该如何解决这个问题?
【问题讨论】:
-
那么,
function(err, res)回调函数根本没有执行? -
是的。它挂在 setTimeout() 处。如果我删除超时,代码执行得很好。
-
你在这里使用什么请求模块?
-
我使用了旧的 console.log 来确定它是否到达那里并且它没有工作。这是我尝试的第一件事。我想不通,所以我只是更改了我的异步库,这样我就不必使用 setTimeout 了,现在我没事了。这个问题还是很奇怪。
-
@GeorgeEracleous 如果有一个可以重现问题的虚拟项目会非常好,这样我们就可以单独尝试(使用相同的依赖项、node.js 版本,甚至必要时使用操作系统)。