【问题标题】:Workaround for Mocha async test timeouts [duplicate]Mocha 异步测试超时的解决方法 [重复]
【发布时间】:2017-02-26 14:17:04
【问题描述】:

我正在尝试使用 mocha 和 chai 编写单元测试,但是我遇到了一个问题,即我收到超时错误,而不是引发实际错误,而且我似乎找不到解决方法。

我得到的错误:

  1) Unit Tests for Networks Array
 should check that networks array is not empty:
     Error: timeout of 2000ms exceeded. Ensure the done() callback is being called in this test.

在我的代码中,我已经证明与我正在测试的相反是正确的,所以我有一个预期的失败。

是否有解决此类问题的标准方法?

describe('Unit Tests for Networks Array\n', function () {

    it('should check that networks array is not empty', function (done) {
        git.getNetworks(function (networks) {
            expect(networks).to.be.empty();  // expected failure
            done();
        });
    });

【问题讨论】:

  • 该代码应该可以工作。我忽略 git.getNetworks 是否是一个承诺,但在这种情况下,你错过了用例,如果该回调从未得到解决会发生什么?你能提供更多信息吗?
  • 是的,git.getNetworks 是一个承诺。当它没有解决时,它就会超时。我希望抛出一个错误。

标签: javascript testing promise mocha.js chai


【解决方案1】:

Promises 以这种方式工作,您可以拒绝或解决它。但是,如果您的承诺逻辑中存在错误并且您没有发现错误,因为它被吞下并且默默地死去并且永远不会出现。

git.getNetworks.then(function() { 
/* do something with the result */
}).catch(function() {
 /* error :( */
})

确保您覆盖了拒绝回调(可选)和捕获(始终),否则 Promise 静默抛出和错误,这就是 Mocha 发送超时的原因

【讨论】:

  • 我这样运行它`it('应该检查网络数组是否为空', function (done) { git.getNetworks(function (networks){}.then(function() { expect (networks).to.be.empty(); done() }).catch(function(){ } )); });` .但我得到了一个(中间值)。then 不是函数。
  • 那么 gitNetworks 不是 Promise
猜你喜欢
  • 2020-03-26
  • 2017-12-29
  • 2015-10-02
  • 2017-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-08
  • 1970-01-01
相关资源
最近更新 更多