Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 错误:超过2000毫秒的超时时间。带承诺的单元测试_Javascript_Node.js_Promise_Mocha.js_Assert - Fatal编程技术网

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

Javascript 错误:超过2000毫秒的超时时间。带承诺的单元测试,javascript,node.js,promise,mocha.js,assert,Javascript,Node.js,Promise,Mocha.js,Assert,我的单元测试向NetAPI发出http请求,并使用kriskowal q库。当我执行assert调用时,回调和断言失败,我看到错误:超过了2000ms的超时时间,而不是AssertionError。我写了一个例子来说明这种情况: var assert = require('assert') , Q = require('q'); it('promise', function(cb){ var deferred = Q.defer(); deferred.promise.th

我的单元测试向NetAPI发出http请求,并使用kriskowal q库。当我执行
assert
调用
时,
回调和断言失败,我看到
错误:超过了2000ms的超时时间
,而不是
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不提供未经处理的拒绝跟踪,您需要明确地
。完成
承诺发出链已结束的信号。您在测试中得到一个被抑制的错误:

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

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

USSR1414992很高兴我能帮助你,你可能想考虑一个更好的承诺实现。