在持续集成构build中无头无虑地运行JavaScriptunit testing

我有一个在持续集成系统( Atlassian Bamboo 2.5)上运行的webapp构build计划。 我需要将基于QUnit的JavaScriptunit testing整合到构build计划中,以便在每个构build中都会运行Javascripttesting,并且Bamboo将会解释testing结果。

最好我希望能够使构build过程“独立”,以便不需要连接到外部服务器。 关于如何完成这个好主意? 运行构build过程的CI系统位于Ubuntu Linux服务器上。

当我设法自己想出一个解决scheme时,我认为分享它是一个好主意。 这种做法可能并不完美,但这是第一个似乎可行的方法。 随意发表改进和build议。

我所做的一切:

  • 启动一个虚拟帧缓冲区Xvfb的实例
  • 使用JsTestDriver
    • 启动一个Firefox的实例到虚拟帧缓冲区(无头)
    • 捕获Firefox实例并运行testing套件
    • 生成符合JUnit的testing结果.XML
  • 使用Bamboo来检查结果文件是否通过构build

接下来我会经历更详细的阶段。 这就是我的目录结构最终看起来像:

 LIB /
     JsTestDriver.jar
testing/
     qunit /
             equiv.js
             QUnitAdapter.js
     jsTestDriver.conf
     run_js_tests.sh
     tests.js
testing报告/
 build.xml文件

在构build服务器上:

  • 安装Xvfb( apt-get install Xvfb
  • 安装Firefox( apt-get install firefox

进入你的应用程序来构build:

  • 安装JsTestDriver: http : //code.google.com/p/js-test-driver/
    • 添加QUnit 适配器 equiv.jsQUnitAdapter.js
    • configurationJsTestDriver( jsTestDriver.conf ):
服务器:http:// localhost:4224

加载:
 #加载QUnit适配器(如果不使用QUnit,可以省略)
   -  qunit / equiv.js
   -  qunit / QUnitAdapter.js   

 #testing自己(你会想添加更多的文件)
   -  tests.js

创build一个用于运行unit testing和生成testing结果的脚本文件(例如,Bash, run_js_tests.sh ):

 #!/bin/bash # directory to write output XML (if this doesn't exist, the results will not be generated!) OUTPUT_DIR="../test-reports" mkdir $OUTPUT_DIR XVFB=`which Xvfb` if [ "$?" -eq 1 ]; then echo "Xvfb not found." exit 1 fi FIREFOX=`which firefox` if [ "$?" -eq 1 ]; then echo "Firefox not found." exit 1 fi $XVFB :99 -ac & # launch virtual framebuffer into the background PID_XVFB="$!" # take the process ID export DISPLAY=:99 # set display to use that of the xvfb # run the tests java -jar ../lib/JsTestDriver.jar --config jsTestDriver.conf --port 4224 --browser $FIREFOX --tests all --testOutput $OUTPUT_DIR kill $PID_XVFB # shut down xvfb (firefox will shut down cleanly by JsTestDriver) echo "Done." 

创build一个调用脚本的Ant目标:

 <target name="test"> <exec executable="cmd" osfamily="windows"> <!-- This might contain something different in a Windows environment --> </exec> <exec executable="/bin/bash" dir="test" osfamily="unix"> <arg value="run_js_tests.sh" /> </exec> </target> 

最后,告诉Bamboo构build计划既调用test目标,又查找JUnittesting结果。 这里默认的"**/test-reports/*.xml"会很好。

对于有兴趣在maven中无所畏惧地运行Jasmine BDD规范的人,您可能会对我所维护的jasmine-maven-plugin感兴趣:

http://github.com/searls/jasmine-maven-plugin

作为替代,你也可以尝试TestSwarm。 我使用QUnit来运行我的JStesting。

在过去的一年里,我曾经玩过一些解决scheme,但是我没有在噶玛(以前称为“耻辱”)球场find任何东西。 试一试

http://karma-runner.github.com/

您可以使用无头浏览器rhino在您的CI机器上运行您的unit testing。 当然,这里的缺点是它不会find特定于浏览器X的错误,但它确实在你的CI盒子上安装2-3个操作系统,以覆盖所有的主要平台。

但是,是的,这种糟透了……但是在CI场景中它可能工作的很好。

我用maven和junit来打电话给犀牛。 这不是优雅的,但我用它来testing基本服务和实用程序代码。

它需要嘲讽不受支持的类,如XHR和Java库。

我发现最好的代码在JavaScript(testing等)的一切,只使用junit的构build组织和一个挂钩到CI。

我想看看JsTestDriver是否可以做到这一点。 或者摩卡瓦特/尤尼特记者。

JStesting亚军是一个很好的解决scheme。 它使用PhantomJS和QUnit。