PhantomJs在使用grunt-karma测试用例运行时崩溃???? /

时间:2015-01-23 11:22:54

标签: phantomjs karma-runner

我们在使用幻像运行业力测试案例时遇到了一个问题,我们的幻像崩溃并断开连接。  这是由于内存泄漏或其他一些问题。如果有人有一些合适的解决方案,请告诉我。  我发现解决方法是将测试用例分解为多个grunt任务,但由于我们有大量超过1500的测试用例,因此这不是一个可行的任务。

我们使用以下版本
节点: - 0.10.32 业力: - 0.12.24 PhantomJs: - 1.9.8(karma-phantomJs-Launcher)

请尽快告诉我解决方案。

3 个答案:

答案 0 :(得分:2)

我发现有两个原因可以发生这种情况。

  1. PhantomJS在其标签关闭之前不会释放内存,所以如果你的测试套件太大,你的内存就会用完。
  2. karma-phantomjs-launcher& karma-phantomjs2-launcher不会为他们启动的浏览器进程挂钩stdout / stderr输出,所以我看到一些实例,启动的浏览器只是挂起并断开连接,很可能是因为它的stderr输出被填满了
  3. 通过将测试套件拆分为较小的问题,可以解决第一个问题。或者,您可以研究是否有可能告诉PhantomJS运行其JavaScript垃圾收集,但我没有走这条路,因此无法在那里提供更多细节。

    第二个问题可以通过以下方式解决:

    1. 使用最新的karma-phantomjs-launcher版本挂钩浏览器stdout / stderr输出(在版本0.2.1中修复)
    2. 使用karma-phantomjs2-launcher中的pull request #5版本,它会从基础karma-phantomJS-launcher项目中带来上游更改,从而解决此问题。

答案 1 :(得分:0)

我遇到了处理随机崩溃的同类问题。虽然我没有找到避免它们的方法,但有可能在崩溃时重新启动grunt任务。

grunt.registerTask('karma-with-retry', function (opt) {
var done = this.async();
var count = 0;
var retry = function () {
    grunt.util.spawn({
        cmd : "grunt",
        args : ["connect", "karma"], // your tasks
        opts: {
            stdio: 'inherit'
        }
    }, function (error, result, code) {
        count++;
        if (error && code === 90 /* Replace with code thrown by karma */) {
            if(count < 5) {
                grunt.log.writeln("Retrying karma tests upon error: " + code );
                retry();
            } else {
                done(false);
            }
        } else {
            done(result);
        }
   });
}
retry();
});

来源https://github.com/ariya/phantomjs/issues/12325#issuecomment-56246505

答案 2 :(得分:0)

我在断言下面一行时让Phantom崩溃了

dom.should.be.instanceof(HTMLCollection);

使用chrome,但幻像崩溃没有任何有用的错误消息。 在PhantomJS_debug浏览器上运行相同的测试并且debug选项设置为true后,我能够看到真正的错误消息。

显示以下错误消息。

The instanceof assertion needs a constructor but object was given.

而不是

PhantomJS has crashed. Please read the bug reporting guide at
<http://phantomjs.org/bug-reporting.html> and file a bug report.

因此断言可以使用chrome,但幻像2.1.1会因上述错误而崩溃。希望这会有所帮助。