Javascript 错误:超过2000毫秒的超时时间。带承诺的单元测试
我的单元测试向NetAPI发出http请求,并使用kriskowal q库。当我执行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
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
对异步行为进行建模显示正常的AssertionErrorQ不提供未经处理的拒绝跟踪,您需要明确地。完成
承诺发出链已结束的信号。您在测试中得到一个被抑制的错误:
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很高兴我能帮助你,你可能想考虑一个更好的承诺实现。