javascript - 错误 : timeout of 2000ms exceeded. 带有 promise 的单元测试

标签 javascript node.js promise mocha.js assert

我的单元测试向 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/

相关文章:

javascript - Promise.all 然后 (js)

mysql - 在并行模式下使用同一事务运行多个查询是一种不好的做法吗?

java - FXML、脚本标签和初始化方法

javascript - 使用 fs.createWriteStream 在 Nodejs 中写入大文件

javascript - 使用 CORS 保存单页应用程序的用户 session ?

javascript - 如何结合 gulp-watch 和 gulp-inject?

javascript - js闭包,从全局上下文中获取函数参数

javascript - innerHTML 错误 IE8

javascript - 如何检查 jquery 中选择的值是否可选(如果不抛出错误)?

javascript - 如何运行从客户端接收到的 JavaScript(html、js)?