错误:超过2000毫秒超时。 unit testing承诺

我的unit testing向HTTP API请求HTTP请求并使用kriskowal q库。 当我assert调用, thencallback和断言失败,我看到Error: timeout of 2000ms exceeded而不是AssertionError 。 我写了一个例子来说明这种情况:

 var assert = require('assert') , Q = require('q'); it('promise', function(cb){ var deferred = Q.defer(); deferred.promise.then(function(){ assert(false); cb(); }); deferred.resolve(); }); 

我无法理解这种行为。 使用setTimeout/setImmediatebuild模asynchronous行为显示正常的AssertionError

Q不提供未处理的拒绝跟踪,你需要明确地.done承诺,信号链已经结束。 你在testing中得到一个压制的错误:

 it('promise', function(cb){ var deferred = Q.defer(); deferred.promise.then(function(){ assert(false); cb(); }).done(); // NOTE THE DONE deferred.resolve(); }); 

然而,摩卡提供了更好的承诺语法,您可以简单地返回一个承诺,并拒绝转向testing失败:

 it('promise', function(cb){ return new Q.Promise(function(resolve){ resolve(); }). // use the new syntax then(function(){ assert(false); cb(); });// no done needed because of the `return` });