如何通过karma和phantomjs来解决内存错误

tay*_*onr 20 phantomjs karma-runner karma-jasmine

我们正在运行测试使用karmaphantomjs 上周,我们的测试神秘地开始崩溃phantomJS,错误为-1073741819.

基于此线程,Chutzpah似乎代码表明PhantomJS的本机内存故障.

经过进一步调查,我们一直看到幻像在750MB左右的内存中崩溃.

有没有办法配置Karma,以便它不会遇到这个限制?或者告诉它冲洗幽灵的方法?

到目前为止,我们只进行了大约1200次测试 我们大约是项目的1/4,因此5000个UI测试似乎不可能.

tay*_*onr 9

由于发布问题并快速发现答案的StackOverflow现象,我们通过添加gulp任务解决了这个问题.在我们刚刚karma start在命令行运行之前.这打破了一个幻影的单个实例,当达到750MB时崩溃.

现在,我们有我们的测试,如部分中的每一个命令,一饮而尽gulp common-tests,并gulp admin-testsgulp customer-tests

然后gulp karma运行每个分组的单个.这允许每个gulp命令具有其自己的幻像实例,因此保持在该阈值之下.


小智 8

我们遇到了类似的问题.你的方法很有意思,肯定会解决这个问题.但是,请准备好以后再次面对它.

我做了一些调查,发现了记忆增长的原因(至少在我们的例子中).使用时结果如下:

   beforeEach(inject(SomeActualService)){ .... }
Run Code Online (Sandbox Code Playgroud)

SomeActualService占用的内存不会在describe块的末尾释放,如果你有多个测试文件,你注入相同的服务(或其他可注入的对象),将再次为它分配更多的内存.

关于如何避免这种情况,我有几点想法:1.创建模拟对象,永远不要使用inject来获取真实对象,除非你在测试该模块的测试中.这将需要编写大量的额外代码.2.为可注射对象创建自己的跟踪器(仅用于测试).这样它们只能加载一次并在测试文件之间重用.

忘了提一下:我们正在使用angular 1.3.2,Jasmine 2.0并在1000次测试中遇到这个问题.


Spl*_*tar 7

在使用PhantomJS 1.9.18在Windows 10上进行大约1037次测试后,我也遇到了这个问题.

ERROR [launcher]: PhantomJS crashed.在此过程的RAM之后,它似乎会超过大约800-850 MB.

这里似乎有一个临时修复:

你通过它安装它 npm install karma-phantomjs2-launcher --save-dev

但是后来需要在karma.conf.jsvia中使用它

config.set({
    browsers: ['PhantomJS2'],
    ...
});
Run Code Online (Sandbox Code Playgroud)

这似乎运行相同的测试集,而只使用250-550 MB RAM并且没有崩溃.

请注意,此修复程序在Windows和OS X上开箱即用,但不适用于Linux(PhantomJS2二进制文件无法启动).这会影响对Travis CI的推动.

要在Debian/Ubuntu上解决此问题:

sudo apt-get install libicu52 libjpeg8 libfontconfig libwebp5


Nic*_*ane 5

这是PhantomJS的一个问题.根据另一个消息来源,PhantomJS仅在页面关闭时运行垃圾收集器,这只在测试运行后才会发生.其他浏览器工作正常,因为他们的垃圾收集器按预期工作.

在这个问题上花了几天之后,我们得出结论,最好的解决方案是将测试分成几组.我们让grunt动态地为每个目录创建一个配置文件,并创建一个运行所有这些配置文件的命令.对于所有意图和目的,它的工作方式相同.