2012-04-23 114 views
14

是否可以从Jenkins执行我的QUnit(javascript)单元测试?我的构建脚本是Apache Ant。 Jenkins会将它作为单独的构建步骤执行吗?还是需要在我的Ant构建脚本的配置中添加一些内容?用Jenkins和Apache Ant运行QUnit测试?

+0

对于QUnit/Jenkins,您也可以使用Arquillian-QUnit扩展:http://stackoverflow.com/questions/7756644/jenkins-qunit/18263488#18263488 – 2013-08-15 23:30:34

回答

18

所以,我终于弄清楚了这一点。

这里是我的端至端的实现:

  1. 安装PhantomJS(http://phantomjs.org/) - 我在编译/ tools文件夹

  2. 安装此安装PhantomJS QUnit亚军脚本(https://gist.github.com/1588423) - 也安装在我的build/tools文件夹中

  3. 将以下目标添加到我的build.xml文件中:

<target name="qunit" description="runs QUnit tests using PhantomJS"> 
     <!-- QUnit Javascript Unit Tests --> 
     <echo message="Executing QUnit Javascript Unit Tests..."/> 
     <apply executable="path-to-your-phantomjs-bin-folder/phantomjs" > 
     <arg value="-path-to-your-build-tools/qunit-runner.js" /> 
     <arg line="--qunit path-to-your-qunit-folder/qunit.js --tests path-to-your-test-folder --juni path-where-you-want-to-write-the-JUnit-style-output/qunit-results.xml" /> 
     <fileset dir="${basedir}/${dir.test}" includes="tests.js" /> 
     <srcfile/> 
     </apply> 
    </target> 
  • 在我的詹金斯项目配置,我现在调用Ant与 “缩小qunit”

  • 我点詹金斯JUnit的风格输出XML文件

  • 而且,这里的工作流程:

    1. 检查变更到我的回购
    2. 詹金斯将轮询GitHub的更改
    3. 如果有任何变化,詹金斯将拉低
    4. 蚂蚁将被调用,做构建,然后运行我的单元测试
    5. 测试结果将被发表在类似JUnit的XML格式
    6. 詹金斯将分析这个输出文件。如果没有测试失败,构建将被标记为“成功”。如果任何测试失败,生成将被标记为“不稳定”
    7. 詹金斯将部署Web改变
    8. 詹金斯将清理工作区

    PS:目前,你必须手动删除JUnit类型的XML输出文件。我稍后会解决这个问题。

    PS:下载定制的qunit。JS(https://gist.github.com/2488794

    +5

    为什么要定制QUnit?你不是现在卡在那个版本? – 2012-07-09 15:00:03

    +0

    “--juni path-where-you-to-write-the-JUnit-style-output/qunit-results.xml”“ 它应该是--junit:lol: – kidnan1991 2015-01-16 04:19:36

    1

    如果我正确理解您的设置,您可以运行Ant构建步骤,提供您的build.xml,顶级目标和-D参数(如果有)的位置。 This可能会有所帮助。

    +1

    这是否有帮助? – 2012-05-07 09:25:40

    0

    Qunit本身现在维持phantomjs亚军:

    https://github.com/jquery/qunit/tree/master/addons/phantomjs

    因此,假如你已经安装phantomjs,从上面的链接抓取runner.js(或者使用bower /任何js包管理器获取它),把它的地方,詹金斯可以找到它,然后使用:

    phantomjs path/to/runner.js path/to/your/qunit_tests.html 
    

    它给最小的输出是这样的:

    $ phantomjs superlists/static/tests/runner.js accounts/static/tests/tests.html 
    Took 29ms to run 11 tests. 11 passed, 0 failed. 
    

    或者这样,如果它失败:

    $ phantomjs superlists/static/tests/runner.js accounts/static/tests/tests.html 
    Test failed: sinon tests of navigator.id.watch: watch sees current user 
        Failed assertion: check user, expected: current user, but was: baz 
        at file:///home/harry/superlists/superlists/static/tests/qunit.js:556 
        at file:///home/harry/superlists/accounts/static/tests/tests.html:69 
        at file:///home/harry/superlists/superlists/static/tests/qunit.js:203 
        at file:///home/harry/superlists/superlists/static/tests/qunit.js:361 
        at process (file:///home/superlists/superlists/static/tests/qunit.js:1453) 
        at file:///home/harry/superlists/superlists/static/tests/qunit.js:479 
    Took 29ms to run 11 tests. 10 passed, 1 failed. 
    

    没有的JUnit的XML集成,但至少它返回一个错误代码,如果它失败了,所以它会失败在詹金斯的构建...

    $ echo $? 
    1 
    
    +0

    已更新的链接到runner.js https://github.com/jonkemp/qunit-phantomjs-runner – zbug 2015-04-20 14:43:54