【问题标题】:PhantomJs Crashes while running with grunt-karma test cases ????/PhantomJs 在运行 grunt-karma 测试用例时崩溃????/
【发布时间】:2015-01-23 11:22:54
【问题描述】:

我们在使用 phantomJs 运行 karma 测试用例时面临一个问题,我们的 phantomJs 崩溃并断开连接。 这是由于内存泄漏还是其他问题。如果有人有合适的解决方案,请告诉我。 我发现解决方法是将测试用例分解为多个 grunt 任务,但由于我们有很多超过 1500 个的测试用例,所以这不是一个可行的任务。

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

请尽快告诉我解决方案。

【问题讨论】:

  • 您认为某人如何根据您的描述确定原因是什么?内存泄漏??使用塞子堵住泄漏点。
  • 嗨,Thomas,通过各种类似的问题,我得出的结论是,这可能是由于幻象的内存泄漏问题,因为它占用了大量内存,我们有大量的测试案例,它在执行 300 多个测试用例后随机崩溃。请详细说明插头是什么意思...
  • 对不起,有点讽刺,请忘记。您应该编辑您的问题以反映您评论中的信息。不过,我想你最好使用更大的机器。

标签: phantomjs karma-runner


【解决方案1】:

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

  1. PhantomJS 在其选项卡关闭之前不会释放内存,因此如果您的测试套件太大,您可能会耗尽内存。
  2. karma-phantomjs-launcher & karma-phantomjs2-launcher 不要为他们启动的浏览器进程挂钩 stdout/stderr 输出,所以我看到一些启动浏览器只是挂起并断开连接的实例,很可能是由于它的 stderr 输出被填满李>

第一个问题可以通过将测试套件拆分成更小的套件来解决。或者,您可以研究是否有办法告诉 PhantomJS 运行其 JavaScript 垃圾收集,但我没有走这条路,因此无法提供更多详细信息。

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

  1. 使用最新的karma-phantomjs-launcher 版本将浏览器挂接到stdout/stderr 输出(已在版本0.2.1 中修复)
  2. 使用来自其pull request #5karma-phantomjs2-launcher 版本,该版本从基础karma-phantomJS-launcher 项目引入上游更改,从而也解决了这里的问题。

【讨论】:

    【解决方案2】:

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

    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

    【讨论】:

      【解决方案3】:

      断言以下行时 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 对断言没有问题,但 phantom 2.1.1 因上述错误而崩溃。希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多