March 17, 2013

JSCoverでQUnitのユニットテストのカバー率を取得してみる

試しに、以前作ったChrome ExtensionのSubotageで少しテストケースを書いて、カバー率を取得してみました。(Macで確認しています。)
https://github.com/mp-php/subotage

(1)
JSCoverをダウンロードします。JSCoverは、要Javaです。
http://tntim96.github.com/JSCover/
尚、ライセンスは"GNU General Public License, version 2"と記載されています。

(2)
ダウンロードしたら解凍して、以下のコマンドを実行してJSCoverを起動します。
sudo java -Dfile.encoding=UTF-8 -jar target/dist/JSCover-all.jar -ws --branch --port=81 --document-root=/xxx/subotage_root/assets --report-dir=/yyy/zzz
* "-Dfile.encoding=UTF-8"は、"org.mozilla.javascript.EvaluatorException"が出たので付けました。
* --document-rootは、ユニットテストを実行するhtmlが有る場所です。(htmlは直下に無くても良いです。)
* --report-dirは、レポートの出力ディレクトリです。
* --portは、指定しないと8080がデフォルトになるようです。
* その他は、とりあえずドキュメント通りです。

起動は、以下から確認できます。(ポートは必要に応じて変えて下さい。)
http://localhost:81/jscoverage.html

上記のURLに、ユニットテストを実行するhtmlをパラメータとして付与します。前述の--document-rootからの相対パスになります。
http://localhost:81/jscoverage.html?qunit/test/app/index.html
ユニットテストが実行されました。

Summaryタブからカバレッジが確認できます。



PhantomJSでも、以下の方法で出力出来ました。

(A)
run-jscover-qunit.jsをダウンロードします。
https://github.com/tntim96/JSCover/blob/master/src/test/javascript/lib/PhantomJS/run-jscover-qunit.js

(B)
以下のように実行します。尚、JSCoverが起動している必要があります。(前述の(2)です。)
phantomjs run-jscover-qunit.js http://localhost:81/qunit/test/app/index.html

(C)
JSCoverの起動時に指定した"--report-dir"の中に"phantom"ディレクトリが作成されました。
その中にあるjscoverage.htmlにhttpでアクセスすると、カバレッジが表示されました。

読み込んだjsファイルしか対象になりませんし、その精度はよく分からないですが、何もないよりは良いんじゃないでしょうか。


P.S.
Jenkins等で自動実行する場合は
の「5.5Ant」が参考になりそうです。"Example starting the server"と"Example stopping the server"の間にphantomjsコマンドを挟めば良い気がしますが、今度、実際に確認してみます。("3.5 Report Conversion & Merging"も組み合わせてみよう。)

No comments:

Post a Comment