为什么我的AngularJS、Karma/Jasmine测试运行得这么慢?

为什么我的AngularJS、Karma/Jasmine测试运行得这么慢?,angularjs,jasmine,karma-runner,Angularjs,Jasmine,Karma Runner,我有一些简单的karma/jasmine单元测试,它们针对angularjs应用程序运行。我使用最新版本的Chrome,并在WebStorm IDE中运行测试 有时测试套件运行得非常快(0.24秒) 有时,针对完全相同的代码的完全相同的测试套件运行速度非常慢(120秒) 我已经尝试了每一种常识性的解决方法。我在网上搜寻,试图发现我做错了什么 为什么我的测试运行得这么慢?答案很简单 我正在使用Chrome运行karma服务器。当你第一次启动karma服务器时,Chrome的一个实例作为一个最大化窗

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

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

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

我已经尝试了每一种常识性的解决方法。我在网上搜寻,试图发现我做错了什么


为什么我的测试运行得这么慢?

答案很简单

我正在使用Chrome运行karma服务器。当你第一次启动karma服务器时,Chrome的一个实例作为一个最大化窗口启动。因此,您自然会将其最小化,以便可以看到您的测试正在运行

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

因此,如果您最小化运行karma服务器的浏览器实例,或者只是切换到其他选项卡,则karma服务器的CPU严重不足,测试需要很长时间才能完成

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


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

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

哇!我无法告诉你我已经浪费了多少时间等待测试运行!我在这里要补充的是,窗口似乎不必是可见的。只是不最小化它似乎在工作。OMFG!接得好!这就是说,Chrome中有什么东西我们可以禁用以关闭这个CPU节省功能吗?除非你绝对需要Chrome,否则我建议你使用PhantomJS这样的无头浏览器,这样你就不会有这个问题了。但是使用无头浏览器又如何呢?甚至我的经验告诉我Chrome(或PhantomJS驱动程序)的Karma非常慢。在您点击Enter键的那一刻,构建需要25秒,引导需要5-6秒,再运行1个测试需要1.8秒。即使我按下save,在运行测试之前也会有几秒钟的延迟……我怀疑SSD会有所帮助。只是提醒大家,PhantomJS的运行速度似乎比Chrome和Chrome Headless慢得多。在我们的CI服务器上,每次测试几乎需要一秒钟的时间,这是完全不可接受的。PhantomJS现在已暂停(不推荐使用),ChromeHeadless可能是您正在寻找的。如果您使用Phantom,您可能会发现您正在使用的一些很酷的新JS功能不受支持或需要polyfill。