【问题标题】:Why are my AngularJS, Karma / Jasmine tests running so slowly?为什么我的 AngularJS、Karma / Jasmine 测试运行如此缓慢?
【发布时间】:2013-11-10 02:53:42
【问题描述】:

我有一些针对 angularjs 应用程序运行的简单 karma / jasmine 单元测试。我使用最新版本的 Chrome 并在 WebStorm IDE 中运行我的测试。

有时测试套件运行得非常快(0.24 秒)

有时完全相同的测试套件针对完全相同的代码运行非常慢(120 秒)

我已经尝试了所有常识性的修复方法。我已经在网上搜索并尝试发现我做错了什么。

为什么我的测试运行如此缓慢?

【问题讨论】:

  • 即使我的经验告诉我使用 Chrome(或 Phantom JS 驱动程序)的 Karma 非常慢。在您按下 Enter 的那一刻,构建需要 25 秒,引导需要 5-6 秒,另外需要 1.8 秒(运行 1 个测试)。即使我按下保存,在运行测试之前也会有几秒钟的延迟......我怀疑 SSD 会有所帮助。

标签: angularjs jasmine karma-runner


【解决方案1】:

答案很简单。

我正在使用 Chrome 来运行 karma 服务器。当您第一次启动 karma 服务器时,Chrome 实例会作为最大化窗口启动。所以自然而然地你将它最小化,这样你就可以看到你的测试正在运行。

问题在于 Chrome 会耗尽 CPU 周期的所有最小化或辅助选项卡(切换选项卡)。

因此,如果您将运行 karma 服务器的浏览器实例最小化,或者只是切换到不同的选项卡,那么 karma 服务器会严重缺乏 CPU,并且测试需要很长时间才能完成。

解决方案是保持 karma 选项卡处于活动状态。浏览器窗口可以隐藏在其他窗口之后,但 karma 选项卡必须是选定的选项卡,并且浏览器不得最小化

遵循这些简单的规则将确保您的测试始终全速运行。

【讨论】:

  • 哇!我无法告诉你我浪费了多少小时等待测试运行!我将在这里补充一点,似乎窗口不必是可见的。只是不最小化它似乎是有效的。
  • OMFG!不错的收获!也就是说,在 Chrome 中我们可以禁用某些东西来关闭这个节省 CPU 的功能吗?
  • 除非你绝对需要 Chrome,否则我建议使用像 PhantomJS 这样的无头浏览器,这样你就不会遇到这个问题
  • 但是对于无头浏览器呢?
【解决方案2】:

Biofractal 已经回答了他自己的问题,您可以这样做。您还可以将测试设置为在 PhantomJS 或 Chrome Headless 中运行,这基本上允许单元测试仅在您的命令行中运行,从而消除对实际浏览器的影响。

【讨论】:

  • 只是提醒人们,PhantomJS 的运行速度似乎比 Chrome 和 Chrome Headless 慢很多。在我们的 CI 服务器上,每次测试几乎需要一秒钟,这是完全不可接受的。
  • PhantomJS 现在已暂停(已弃用),ChromeHeadless 可能是您正在寻找的。如果您确实使用 Phantom,您可能会发现您正在使用的一些很酷的新 JS 功能不受支持或需要 polyfill。
  • Puppeteer 是一个更好的选择,因为它可以作为您项目的开发依赖项添加。这样就无需在 CI 服务器中安装 Chrome。
猜你喜欢
  • 2016-10-06
  • 2014-05-04
  • 1970-01-01
  • 1970-01-01
  • 2019-02-17
  • 1970-01-01
  • 2016-03-27
  • 2018-10-04
  • 2021-10-10
相关资源
最近更新 更多