导致此问题的原因:"Timeout of 10000ms exceeded. For async tests and hooks, ensure "done()" is called;."

What is causing this issue: "Timeout of 10000ms exceeded. For async tests and hooks, ensure "done()" is called;."

在 VueJs web 应用程序中,我们使用 vue-test-utils 和 mocha-webpack 编写了 500 多个单元测试用例(在所有模块中),使用 nyc 进行覆盖率报告。 考虑一个目录中的每个模块。当我 运行 特定模块的测试用例时,报告会成功生成,并带有测试用例结果(通过或失败)。但是运行一口气把所有的测试用例(通过在package.json中设置路径),所有的测试用例都不执行并抛出以下错误:

超过 100000 毫秒超时。对于异步测试和挂钩,确保 "done()" 被调用;如果返回 Promise,请确保它已解析。

我看到过类似的问题,建议在代码中使用异步等待或增加超时来解决这个问题,但是为什么当我 运行 特定模块时测试用例会执行,而当我 运行 整个项目。

我已经尝试在 package.json 中设置 --timeout 100000 并且它有助于大量的测试用例,但是当 运行 重新设置所有(超过 500 个)单元测试用例时它抛出同样的错误。 我认为这与测试用例的数量有关。

导致此问题的原因以及如何解决此问题以便所有测试用例 运行 成功。?

编辑 如果单元测试中的任何代码导致此超时问题,如何检测导致此问题的测试用例,因为通过查看命令提示符中的日志似乎无法检测问题的根源。任何指针都会有所帮助。

试了这么多办法,得出结论,解决了上面的问题:

  1. 当我们运行test-cases,并且有依赖相关的警告 然后它减慢 test-cases 并给出超时问题。这 解决方案是通过模拟操作来删除这些警告, 突变、吸气剂和存根子组件。
  2. 添加 NODE_OPTIONS: 'node --max_old_space_size=16384' 在 配置文件会增加 NodeJS memory.This 有改进 unit-tests.
  3. 的表现
  4. 不使用 beforeEach,而是使用 before 和 after 方法 将组件安装在包装器中。也可以在 after 方法中使用 destroy 销毁包装如下:

let wrapper;

before(() => {
  wrapper = mount('component_name', {
    ...
  })
});

after(() => {
  wrapper.destroy();
});