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

Error: timeout of 2000ms exceeded. Unit test with promises

本文关键字:承诺 单元测试 毫秒 2000 超时 错误      更新时间:2023-09-26

我的单元测试向NET API发出http请求并使用kriskowal q library。当我调用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

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