[JavaScript] おすすめユニットテスト・ライブラリ(フレームワーク):QUnit、Jasmine、JsUnit
現在、さまざまなJavaScript向けのユニットテスト用ライブラリがリリースされている。
Wikipedia: ユニットテスト・フレームワーク一覧: JavaScript
有名どころでは「QUnit」と「Jasmine」、「JsUnit」がある。
QUnit
非常にシンプルで手軽に使えるピュアJavaScriptのライブラリ。基本的に、二つのファイルをHTMLのscriptタグで読む込むだけで使える。
「-Unit」という名称がついているものの、いわゆる「xUnit」系とはメソッドの識別子などが大幅に異なるが、そもそも主要な関数は3つしかないので覚えやすい。
ok() | assertTrue() |
throws() | コールバック関数が例外を投げるか |
asyncTest() | 非同期処理のための関数 |
元々はjQuery向けにつくられていたこともあり、開発は活発で将来性もある。
ライブラリそのものはCDNでも提供されているので組み込みやすい。
よほどユニットテストやTDD、BDDにこだわるのでないかぎり、これで十分。というより、スタッフの習得コストを考えたら、こちらのほうが利点が多いだろう。
Jasmine
元々は、「JsUnit」を開発していた人たちがつくったライブラリ。
Rubyのユニットテスト・フレームワーク「RSpec」の影響を受けている。
オーソドックスなHTMLベース(ブラウザでテスト結果を閲覧するタイプ)の「standalone」版だけでなく、Rubyの「RubyGems」と「Rake」を利用してテスト用ファイルを自動生成して実行する機能もある。
また、JUnitにある「assertThat()」で使うようなマッチャ(Macher)に相当する機能もある。これは、ユニットテストでよくある「特定の値が特定の条件に合致することを期待する」というテストを明示的に書けるようにしたもの。
全体的に多機能で素晴らしい面もあるのだが、独特の部分が多く、わかりづらい印象は否めない。ちょっとしたテストや初心者には厳しいので、QUnitのほうをおすすめしたい。
JsUnit
有名な「Google Closure Library」に採用されている(組み込まれている)が、すでに更新されていない。
公式サイトに、すでに開発は終了し、前述の「Jasmine」に移行したと書いてある(つまり実質的に使えない)。
まとめ
個人的にはQUnitがおすすめ。
Jasmineのほうがいろいろなことができて厳格なテストには向いているのだが、JavaScriptの使われるシーンを思うと、ややオーバースペックの感もある。
Ajaxで巨大なWebアプリケーションをつくるならともかく、大半の場合はQUnitで必要十分だろう。