継続的インテグレーションシステム( Atlassian Bamboo 2.5)で実行されているwebappビルドプランがあります。各ビルドでJavascriptテストが実行され、Bambooがテスト結果を解釈できるように、ビルドプランに QUnit -ベースのJavaScriptユニットテストを組み込む必要があります。
できれば、外部サーバーへの接続が不要になるように、ビルドプロセスを「スタンドアロン」にできるようにしたいと思います。これを達成する方法についての良いアイデアは?ビルドプロセスを実行しているCIシステムは、Ubuntu Linuxサーバー上にあります。
自分で解決策を考え出すことができたので、それを共有することをお勧めします。アプローチは完璧ではないかもしれませんが、それが機能するように思われた最初のものです。改善や提案を投稿してください。
簡単に言えば:
次に、より詳細なフェーズについて説明します。これは私の私のディレクトリ構造が次のようになっているものです:
lib / JsTestDriver.jar test / qunit / equiv.js QUnitAdapter.js jsTestDriver.conf run_js_tests.sh tests.js test-reports / build.xml
ビルドサーバー:
apt-get install Xvfb
)apt-get install firefox
)ビルドするアプリケーションに:
equiv.js
およびQUnitAdapter.js
jsTestDriver.conf
):サーバー:http:// localhost:4224 load: #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>
最後に、test
ターゲットを呼び出すことと、JUnitテスト結果を探すことの両方をBambooビルドプランに伝えます。ここではデフォルトの"**/test-reports/*.xml"
は問題ありません。
JavenのBDD仕様をMavenでヘッドレスで実行することに興味がある人は、私が保守しているjasmine-maven-pluginに興味があるかもしれません。
過去1年間、いくつかの解決策を試してきましたが、カルマの球場(以前の遺言)には何も見つかりませんでした。試してみる
別の方法として、TestSwarmを試すこともできます。 JUnitテストを実行するためにQUnitを使用して実行しました。
Mavenとjunitを使用してrhinoを呼び出しました。エレガントではありませんが、基本的なサービスとユーティリティコードのテストに使用しています。
Javaライブラリを使用したXHRのように、サポートされていないクラスをモックする必要があります。
私はそれがjavascript(テストなど)のすべてをコード化するのに最適であり、ビルドユニットとCIへのフックにjunitのみを使用することを発見しました。
JsTestDriverがそれを実行できるかどうかを確認したいのですが。またはjunitレポーターとモカ。
ヘッドレスブラウザーであるrhinoを使用して、CIマシンでユニットテストを実行できる場合があります。もちろん、ここでの不利な点は、ブラウザXに固有のバグが見つからないことです...しかし、すべてのメインプラットフォームをカバーするために、CIボックスに2〜3個のOSをインストールするよりも優れています...
しかし、そうです、この種の問題は...でも、CIシナリオでは十分に機能する可能性があります。
JS Test Runner はかなり良い解決策です。 PhantomJSとQUnitを使用します。