1

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

超过 100000 毫秒的超时。对于异步测试和钩子,确保调用了“done()”;如果返回 Promise,请确保它已解决。

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

我尝试在 package.json 中设置 --timeout 100000 并且它有助于大量测试用例,但是在再次运行所有(超过 500 个)单元测试用例时它会引发相同的错误。我认为这与测试用例的数量有关。

是什么导致了这个问题以及如何解决这个问题,以便所有测试用例都能成功运行。?

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

4

1 回答 1

1

经过这么多的尝试,得出一个结论,解决了上述问题:

  1. 当我们运行测试用例,并且有依赖相关的警告时,它会减慢测试用例并给出超时问题。解决方案是通过模拟操作、突变、getter 和存根子组件来删除这些警告。
  2. 在配置文件中添加 NODE_OPTIONS: 'node --max_old_space_size=16384' 将增加 NodeJS 内存。这提高了单元测试的性能。
  3. 不要使用 beforeEach,而是使用 before 和 after 方法将组件安装在包装器中。还可以在 after 方法中使用 destroy 来销毁包装器,如下所示:

let wrapper;

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

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

于 2019-07-24T09:27:00.293 回答