2013-10-30 44 views
46

我对一个angularjs应用程序运行了一些简单的业力/茉莉花单元测试。我使用最新版本的Chrome并在WebStorm IDE中运行我的测试。为什么我的AngularJS,Karma/Jasmine测试运行得如此缓慢?

有时测试套件的运行速度很快(0.24秒),

有时完全相同的测试套件对完全相同的代码运行

我都想尽常识修复速度很慢(120秒)。我搜遍了网络,试图发现我做错了什么。

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

+0

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

回答

115

答案结果非常简单。

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

问题是,Chrome会使CPU周期的任何最小化或辅助选项卡(切换的选项卡)陷入瘫痪。

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

解决方案是保持karma选项卡激活。浏览器窗口可以隐藏在其他窗口后面,但业务选项卡必须是选定的选项卡,并且浏览器不得最小化

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

+5

哇!我无法告诉你我等待测试运行浪费了多少时间!我会在这里添加它看起来不像窗口必须可见的。根本不是最小化它似乎工作。 – Pete

+3

OMFG!好的赶上!这就是说,有一些在Chrome中,我们可以禁止把这个CPU节省功能关闭? – Tibo

+0

谢谢,非常有用的提示 –

0

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

+1

只是为了告诫人们,PhantomJS似乎运行比Chrome和Chrome无头慢了许多。这需要这是完全不能接受我们的CI服务器上每个测试几乎是一秒钟。 –

相关问题