2012-04-23 134 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