错误:超过2000毫秒超时。 unit testing承诺
我的unit testing向HTTP API请求HTTP请求并使用kriskowal q库。 当我assert
调用, then
callback和断言失败,我看到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/setImmediate
build模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` });