2013-03-29 32 views
0

我目前正在尝试在Web服务器模式下运行JSCover来确定在PhantomJS无头浏览器中执行的Jasmine测试的覆盖范围。我也使用grunt + nodejs来启动测试。无法让JSCover和PhantomJS在Cloudbees上运行Jasmine测试

我在gruntfile启动JSCover服务器,并执行phantomJS使用的代码是:

// Start JSCover Server 
var childProcess = require('child_process'), 
var JSCOVER_PORT = "43287"; 
var JAVA_HOME = process.env.JAVA_HOME; 

var jsCoverChildArgs = [ 
     "-jar", "src/js/test/tools/JSCover-all.jar", 
     "-ws", 
     "--branch", 
     "--port="+JSCOVER_PORT, 
     "--document-root=./", 
     "--report-dir=target/", 
     "--no-instrument=src/js/lib/", 
     "--no-instrument=src/js/test/", 
     "--no-instrument=src/js/test/lib/" 
    ]; 

var jsCoverProc = childProcess.spawn(JAVA_HOME + "/bin/java", jsCoverChildArgs); 

// Start PhantomJS 
var phantomjs = require('phantomjs'), 
var binPath = phantomjs.path, 

var childArgs = [ 
     'src/js/test/lib/phantomjs_jasminexml_runner.js', 
     'http://localhost:'+JSCOVER_PORT+'/src/js/test/SpecRunner.html', 
     'target/surefire-reports' 
    ]; 
runner = childProcess.execFile(binPath, childArgs); 

runner.on('exit', function (code) { 
    // Tests have finished, so clean up the process 
    var success = (code === 0) ? true : false; 
    jsCoverProc.kill(); // kill the JSCover server now that we are done with it 

    done(success); 
}); 

然而,当我运行詹金斯节点上的Web服务器中的CloudBees,然后对其运行phantomjs,我得到下面的错误之一:

  • 有些测试开始运行,但随后的进程失败:

    A spec : should be able to have a mock lo-dash ... 
    Warning: Task "test" failed. Use --force to continue. 
    
    Aborted due to warnings. 
    Build step 'Execute shell' marked build as failure 
    Recording test results 
    Finished: FAILURE 
    
  • PhantomJS是无法访问的服务器JSCover:

    Running "test" task 
    phantomjs> Could not load 'http://127.0.0.1:43287/src/js/test/SpecRunner.html'. 
    Warning: Task "test" failed. Use --force to continue. 
    

对于第二个错误,我试图使用不同的端口,并且我设置的主机名(例如端口为127.0.0.1或本地主机,端口为4327,43287等)。这些端口并没有在构建时动态设置 - 我已经在我的grunt脚本中对它们进行了硬编码。

有关为什么上述错误可能会发生,或者为什么我在运行和访问Cloudbees Jenkins节点上的JSCover服务器(但从未在本地计算机上)出现问题的任何想法?

+0

有配置jscover过程记录的方法吗?我不知道这是由低速单核并发问题建立的奴隶(相对于本地计算机),phantomJS开始运行测试,但JSCover服务器尚未完全启动 –

回答

3

因此,当您使用任何进程执行JSCover时,启动需要时间。如果我们预计它会早一点出现,那么错误肯定会出现。

从大文章引用:http://blog.johnryding.com/post/46757192364/javascript-code-coverage-with-phantomjs-jasmine-and

现在,我有一个代码覆盖工具,它满足了我所有的要求, 最后一部分是让这个代码作为我们詹金斯的一部分运行建立 (它使用一个咕噜脚本)。这是很容易得到运行,但我 遇到了一贯打破了我建立了两个错误:

  1. 有时phantomJS将无法连接到JSCover服务器
  2. 有时phantomJS将连接到服务器,但后来放弃在运行过程中随机点执行我的测试。

这些是只发生在我的团队的詹金斯节点,是很难诊断,很奇怪的问题 - 即使他们竟然是简单的修正。

对于问题1,该错误是我执行phantomJS之前我的grunt脚本没有等待JSCover启动的结果。

对于第二个问题,事实证明,我的团队使用一种特殊的茉莉花测试运行,以帮助完成测试后产生的XML文件。与此文件的问题是,它有这样的等待茉莉花完成它的执行的功能,但它放弃了在运行测试之前利用极短的超时。这与詹金斯+ JSCover一个问题,因为它采取的测试加载和运行,现在,他们必须从Web服务器而不是从文件系统加载直更长的时间。幸运的是,这个修复和增加超时一样简单。

+1

LOL。所以有趣的是我(OP)是博客文章的作者,你打我回答我自己的问题。 :)很高兴听到你喜欢我的文章! – linusthe3rd

+0

OMG ..哈哈不能比这更好!伟大的文章兄弟! –

1

我想说,你需要等待一段时间后产卵JSCover - 在过去,我已经做了事情与webdriver当我产卵,然后等待它可用(理想情况下,你可以寻找一个响应和睡眠,重复,直到产生的过程准备就绪)。

即继续之前查找有效的http响应127.0.0.1:43287(无论“有效”意味着服务器启动)。