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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何通过karma和phantomjs来解决内存错误相关的知识,希望对你有一定的参考价值。

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

Based on this thread for Chutzpah似乎代码表明PhantomJS的本机内存故障。

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

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

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

答案

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

现在我们对每个测试部分都有一个gulp命令,例如: gulp common-testsgulp admin-testsgulp customer-tests

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

另一答案

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

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

   beforeEach(inject(SomeActualService)){ .... }

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

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

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

另一答案

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

在进程的RAM超过大约800-850 MB之后,它将显示为ERROR [launcher]: PhantomJS crashed.

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

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

但随后需要在karma.conf.js中使用它

config.set({
    browsers: ['PhantomJS2'],
    ...
});

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

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

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

sudo apt-get install libicu52 libjpeg8 libfontconfig libwebp5

另一答案

这是PhantomJS的一个问题。根据another source的说法,PhantomJS只在页面关闭时运行垃圾收集器,这只在测试运行后才会发生。其他浏览器工作正常,因为他们的垃圾收集器按预期工作。

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

另一答案

我们在linux(ubuntu)上遇到了类似的问题,结果证明该进程可以管理的内存段数量:

$ cat /proc/sys/vm/max_map_count
65530

然后运行:

$ sudo bash -c 'echo 6553000 > /proc/sys/vm/max_map_count'

请注意,该数字乘以100.这将更改会话设置。如果它解决了问题,您可以为以后的所有会话进行设置:

$ sudo bash -c 'echo vm.max_map_count = 6553000 > /etc/sysctl.d/60-max_map_count.conf'
另一答案

回答一个老问题,但希望这有助于......

我有一个构建过程,CI作业只在命令行中运行linux框。所以,似乎PhantomJS是我唯一的选择。我在我的Mac上本地遇到了这个内存问题,但不知怎的,它不会发生在linux盒子上。我的解决方案是向我的package.json添加另一个测试命令以使用Chrome运行karma,并在本地运行以运行我的测试。当推高时,Jenkins将启动常规测试命令,运行PhantomJS。

安装此插件:https://github.com/karma-runner/karma-chrome-launcher

将其添加到package.json

"test": "karma start", "test:chrome": "karma start --browsers Chrome"

以上是关于如何通过karma和phantomjs来解决内存错误的主要内容,如果未能解决你的问题,请参考以下文章

Karma 无法捕获 PhantomJS

npm karma phantomJS undefined 不是构造函数

SyntaxError: Unexpected token 'const' (with Vue, Karma, Webpack, PhantomJS)

karma 启动提示PhantomJS not found on PATH

在Jasmine Unit Test中为PhantomJS配置浏览器语言

PhantomJS 不适用于 Angular2 项目中的 Karma