0-9
JSの単体テストにJsTestDriverがおすすめ

JSで単体テストしたい人限定の話ですが、JsTestDriverが結構良かったので紹介します。

基本的には以下の内容のまとめです。

0-9, JsTestDriverを使うときの注意点
http://0-9.tumblr.com/post/15574052397/jstestdriver
0-9, 最近のJS系のツールを触ってみたまとめ
http://0-9.tumblr.com/post/15398953814/javascript-tools

・JsTestDriverとは何か?

超簡単に言うとSelenium CoreのJS実装とQUnitを合わせたものです。
実際Selenium ver2はJsTestDriverが使ってるWebDriverと言うAPIを使っています。
(WebDriverがブラウザを外部から動かす共通仕様で、Selenium ver2とJsTestDriverはそれを使ってる状態)

・使った感想は?

ブラウザ上で動作するJSの単体テスト環境としてはかなり快適です。
普通にブラウザ起動してリロードしながらのテストでもいいですが、
複数ブラウザで同時にテスト走らせて結果をまとめて表示させる環境としてはかなりいいです。

・使い方は?

多分以下でOK(わたしはWebStorm経由で使ってるのでこの手順は試せてないです)
jarを落とす。
http://code.google.com/p/js-test-driver/downloads/detail?name=JsTestDriver-1.3.3d.jar&can=2&q=
設定ファイル書く。
http://code.google.com/p/js-test-driver/wiki/ConfigurationFile
実行する
java -jar JsTestDriver.jar —port 9876 —config test/JsTestDriver.conf
ブラウザで表示する
http://localhost:9876/capture
// テストコードや対象コードはtest/JsTestDriver.conf内で指定する

・ドキュメントは?

本家は以下が全部。内部ページの左側リンクには全ページ含まれていないので注意(AsyncTestCase、Assertionsとかが無い)
http://code.google.com/p/js-test-driver/w/list?can=1&q=

以下の内容があれば行けると思います。

GettingStarted
http://code.google.com/p/js-test-driver/wiki/GettingStarted
ConfigurationFile
http://code.google.com/p/js-test-driver/wiki/ConfigurationFile
CommandLineFlags
http://code.google.com/p/js-test-driver/wiki/CommandLineFlags
Assertions
http://code.google.com/p/js-test-driver/wiki/Assertions
TestCase
http://code.google.com/p/js-test-driver/wiki/TestCase
AsyncTestCase
http://code.google.com/p/js-test-driver/wiki/AsyncTestCase
HtmlDoc
http://code.google.com/p/js-test-driver/wiki/HtmlDoc

ちょうど3日前に以下の内容も公開されたのでどうぞ。
This is Stuff: JavaScript Testing with JSTestDriver
http://meri-stuff.blogspot.com/2012/01/javascript-testing-with-jstestdriver.html

Web上には日本語のまともな資料は無いっぽいです。
以下の本は実はJsTestDriverベースで書かれてるのでサンプルとしては使えますが、
リファレンスとしては使えないので若干微妙でした。
Amazon.co.jp: テスト駆動JavaScript: Christian Johansen, 長尾高弘: 本
http://www.amazon.co.jp/dp/4048707868/?tag=hatena_st1-22&ascsubtag=d-h2pmv

ちなみに上記「テスト駆動JavaScript」の1章目で「JsTestDriverは非同期をサポートしない」と書かれてますが、現在では普通にサポートしてるので大丈夫です。
あと、本の中ではドキュメントにないAPIの使い方とか解説してるので、ドキュメント関係はそんな状態だと思ってください。
(嘘が書いてたりはしないので普通に使う分には使えるレベルのドキュメントですが。。。)

CodeCoverage pluginとかもあります(実際動くことを確認しました)
http://code.google.com/p/js-test-driver/wiki/CodeCoverage

・サポート環境は?

Chrome, Firefoxの最新版とiOS4では実際に動作することを確認しました。
「テスト駆動JavaScript」では「さすがにIE5系とかじゃ動かないよ!HAHAHA!」とか書いてあった気がするので結構サポート環境は広いと思います。

・他の同種のツールとの比較は?
・Selenium Core、windmill
画面遷移とかUI全体をざっくり確認するにはSeleniumの方がいいと思いますが、細かい単体テストやるならJsTestDriverの方がいいと思います。
・BusterJS
javaではなくnode.jsベースでJsTestDriverよりJSer向きだと思います。
ただ、Windowsで動かないとかCodeCoverage無いとかの問題あるので今のところJsTestDriver使って、ある程度安定したらBusterJSに乗り換えるといいです(って@asu_reさんが言ってた)
・各種単体テストライブラリ(QUnit, Jasmin, Mocha)
例外処理とかの絡みでそのままは使えないですが、QUnit、Jasmineに関してはAdapterが公開されています。
QUnitAdapter
http://code.google.com/p/js-test-driver/wiki/QUnitAdapter
ibolmo/jasmine-jstd-adapter
https://github.com/ibolmo/jasmine-jstd-adapter

・問題点は?

まだ調べきれてないですが、多分UIイベント系のサポートは弱いです。このへんはSeleniumの方が優れてます。
ドキュメントがあんまり揃ってません。
JsTestDriverのJava server自体が対象のJSが変更されてるかどうかを見てキャッシュしてるようです。
何度か試した範囲では問題起きてないですが、実行は速いけどどこがキャッシュしてるのかよく分からなくて若干不安。。。
  1. saitamanakacompozzからリブログしました
  2. compozzshinodddddからリブログして、コメントを追加しました:
    JSで単体テストしたい人限定の話ですが、JsTestDriverが結構良かったので紹介します。 基本的には以下の内容のまとめです。 0-9, JsTestDriverを使うときの注意点...
  3. kumatchsyoichiからリブログしました
  4. impracticable-theorysyoichiからリブログしました
  5. tokiwatchtigaからリブログしました
  6. orihikasyoichiからリブログしました
  7. orihikasyoichiからリブログしました
  8. tataraseitetsushinodddddからリブログしました
  9. tataratechinfofeedshinodddddからリブログして、コメントを追加しました:
    shinodddddがlayer13からリブログ:
  10. bgnori-devtigaからリブログしました
  11. athsearsyoichiからリブログしました
  12. ken0205syoichiからリブログしました
  13. shiodaifukutigaからリブログしました
  14. tigashinodddddからリブログしました
  15. shinodddddlayer13からリブログしました
  16. hidksyoichiからリブログしました
  17. interglaciallayer13からリブログしました
  18. sfuseyasyoichiからリブログしました
  19. yossysurfsyoichiからリブログしました
  20. itigopposyoichiからリブログしました
  21. seapomeraniansyoichiからリブログしました
  22. nullpointerexceptionsyoichiからリブログしました
  23. kitatubasyoichiからリブログしました
  24. layer13nasrapracterからリブログしました
  25. nasrapractersyoichiからリブログしました
  26. knnrsyoichiからリブログしました
  27. kosnsyoichiからリブログしました
  28. ukarsyoichiからリブログしました
  29. daikantousyoichiからリブログしました
  30. swanky-dayssyoichiからリブログしました
  31. syoichi0-9からリブログしました