如何使用Mocha测试setTimeout

时间:2014-04-09 14:53:05

标签: node.js mocha

我在我的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();
          });
  });

我尝试了什么: 显然,时钟在测试过程中被拆开,所以我尝试使用Sinon来模拟时间的流逝,但无济于事。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我今天遇到了类似的问题。 我在没有var clock = sinon.useFakeTimers()的情况下使用clock.restore()

要尝试这样做,您可以使用:

console.log(new Date().getTime());
console.log(new Date().getTime());

如果你得到两倍相同的值,则意味着你可能已经改变了时钟。