Mocha 异步测试超时的解决方法 [重复]
Posted
技术标签:
【中文标题】Mocha 异步测试超时的解决方法 [重复]【英文标题】:Workaround for Mocha async test timeouts [duplicate] 【发布时间】: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 是一个承诺。当它没有解决时,它就会超时。我希望抛出一个错误。 【参考方案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以上是关于Mocha 异步测试超时的解决方法 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
在mocha测试中调用异步函数如何避免超时错误:超过2000ms的超时
尽管使用 done,Mocha 在 Before 钩子中调用异步承诺链超时