我的单元测试向 NET API 发出 http 请求并使用 kriskowal q 库。当我在 then
回调中执行 assert
调用并且断言失败时,我看到 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
promise 以表示链已结束。你在测试中得到了一个被抑制的错误:
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`
});
关于javascript - 错误 : timeout of 2000ms exceeded. 带有 promise 的单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27344138/