错误:超过2000毫秒的超时。承诺的单元测试

时间:2014-12-07 15:22:41

标签: javascript node.js promise mocha assert

我的单元测试向.NET API发出http请求并使用kriskowal q库。当assert调用then回调并断言失败时,我会看到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建模异步行为显示正常AssertionError

1 个答案:

答案 0 :(得分:2)

Q不提供未处理的拒绝跟踪,您需要明确.done承诺信号链已经结束。您的测试中出现了抑制错误:

it('promise', function(cb){
    var deferred = Q.defer();
    deferred.promise.then(function(){
        assert(false);
        cb();
    }).done(); // NOTE THE DONE
    deferred.resolve();
});
然而,Mocha提供了更好的promise语法,你可以简单地返回一个promise并让拒绝转向测试失败:

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`
});