59

継続的インテグレーション システム ( Atlassian Bamboo 2.5) で実行されている webapp ビルド プランがあります。各ビルドで Javascript テストが実行され、Bamboo がテスト結果を解釈できるように、 QUnitベースの JavaScript ユニット テストをビルド プランに組み込む必要があります。

ビルド プロセスを「スタンドアロン」にして、外部サーバーへの接続が不要になるようにしたいと考えています。これを達成する方法についての良いアイデアはありますか? ビルド プロセスを実行する CI システムは、Ubuntu Linux サーバー上にあります。

4

7 に答える 7

55

自分で解決策を思いつくことができたので、それを共有するのは良い考えだと思いました. このアプローチは完璧ではないかもしれませんが、うまくいったと思われる最初のアプローチです。改善点や提案を自由に投稿してください。

私がやったことを一言で言えば:

  • 仮想フレームバッファであるXvfbのインスタンスを起動します
  • JsTestDriver の使用:
    • Firefox のインスタンスを仮想フレームバッファに (ヘッドレスで) 起動します
    • Firefoxインスタンスをキャプチャしてテスト スイートを実行する
    • JUnit 準拠のテスト結果を生成する .XML
  • Bamboo を使用して結果ファイルを検査し、ビルドの成功または失敗を判断する

次に、より詳細なフェーズに進みます。これは、私のディレクトリ構造が最終的に次のようになったものです。

ライブラリ/
    JsTestDriver.jar
テスト/
    単位/
            equiv.js
            QUnitAdapter.js
    jsTestDriver.conf
    run_js_tests.sh
    tests.js
テストレポート/
build.xml

ビルド サーバーで:

  • Xvfb をインストールする ( apt-get install Xvfb)
  • Firefox をインストールする ( apt-get install firefox)

ビルドするアプリケーションに:

サーバー: http://localhost:4224

ロード:
# QUnit アダプターをロードします (QUnit を使用しない場合は省略できます)
  - qunit/equiv.js
  - qunit/QUnitAdapter.js   

# 自分自身をテストします (さらにファイルを追加する必要があります)
  -tests.js

単体テストを実行してテスト結果を生成するためのスクリプト ファイルを作成します (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."

スクリプトを呼び出す 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 ビルド プランにtestターゲットの呼び出しと JUnit テスト結果の検索の両方を指示します。ここでは、デフォルトで"**/test-reports/*.xml"問題ありません。

于 2010-01-15T09:34:05.277 に答える
4

Maven で Jasmine BDD 仕様をヘッドレスで実行することに興味がある人は、私が管理している jasmine-maven-plugin に興味があるかもしれません。

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

于 2010-09-03T16:05:54.950 に答える
3

過去 1 年間、多くのソリューションを試してみましたが、Karma (以前の testacular) の球場には何も見つかりませんでした。試してみる

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

于 2013-03-29T01:24:20.747 に答える
3

別の方法として、TestSwarm を試すこともできます。QUnit を使用して JS テストを実行しています。

于 2010-01-15T17:53:37.827 に答える
1

私はサイを呼び出すためにmavenとjunitを使用しました。エレガントではありませんが、基本的なサービスとユーティリティコードをテストするために使用しています。

これには、Javaライブラリを使用したXHRなど、サポートされていないクラスをモックする必要があります。

すべてをjavascript(テストなど)でコーディングし、組織の構築とCIへのフックにのみjunitを使用するのが最善であることがわかりました。

JsTestDriverがそれを実行できるかどうかを確認したいと思います。または、junitレポーター付きのモカ。

于 2012-03-23T19:40:54.467 に答える
0

JS Test Runnerは非常に優れたソリューションです。PhantomJS と QUnit を使用します。

于 2012-07-25T23:34:34.263 に答える
0

ヘッドレス ブラウザーである rhino を使用して、CI マシンで単体テストを実行できる場合があります。もちろん、ここでの欠点は、ブラウザ X に固有のバグが見つからないことです...しかし、すべての主要なプラットフォームをカバーするために、CI ボックスに 2 ~ 3 つの OS をインストールするよりも優れています...

しかし、はい、この種のことは最悪です... しかし、CI シナリオでは十分に機能する可能性があります。

于 2010-01-15T12:34:35.240 に答える