Node.jsのテストフレームワークについて

Node.js のテストフレームワークは主要なものはここにありますが、どれがいいのか迷ったので試してみたもの、ドキュメントを読んで良さそうものについて印象を記録しておきます。

ちなみに、選出の基準は「ドキュメントが充実していること」です。

追記

ブコメで[twitter:@meso]さんが指摘されてますが、Tobiというブラウザの動作をエミュレーションするモジュールもあります。あと、nClosureもテスト機能をふくんでいるので追加しました。

更に追記(2012/2/23)

この記事を書いた時点では存在しなかった以下のテストフレームワークを追加しました。

  • Mocha
  • Buster.JS

テストフレームワーク

mocha(http://visionmedia.github.com/mocha/)
Buster.JS(Welcome! Buster.JS is... — Buster.JS 0.7 documentation)
  • 下の方で紹介しているSinon.JSの作者が開発しているテストフレームワーク
  • dot/tap/xmlなど出力のカスタマイズに対応
  • assert/BDDスタイル両対応
  • 非同期テスト
  • Sinon.JSと連携
Chai(Chai)
  • shoud/expect/asertの複数スタイルに対応
  • Node.js/ブラウザ両対応
  • プラグイン
  • Shion.JSと連携(Sinon—Chai)
node-qunit(GitHub - qunitjs/node-qunit: QUnit runner for nodejs)
  • QUnitのNode版。
  • ドキュメントが充実
  • クライアント側のテストもQUnitでやるならサーバ側も合わせられるのでよさげ
  • qunit-tapと組み合わせるとTAP出力できるのでproveが使える
    • TAP::Harness::JUnitでJenkinsと連携できる
  • 非同期テスト
  • jscoverageサポート
expresso(GitHub - visionmedia/expresso: use mocha)
  • ドキュメン充実(Expresso - TDD Framework For Node)
  • 作者はTJ(expressのauthor)
  • expressを使っているなら素直にこれを使ったほうがいいかも
    • いまならMochaの方がいい
  • 非同期テスト
  • jscoverageサポート
Vows(GitHub - vowsjs/vows: Asynchronous BDD & continuous testing for node.js)
  • 公式サイト(Vows « Asynchronous BDD for Node)
  • Behavior-Driven Development(BDD)
  • 非同期テスト
  • 出力は JSON/Spec/Dot Matrix対応
  • 個人的にはNodeでBDDするならjasmineよりこっちの方が好み
jasmine-node(GitHub - mhevery/jasmine-node: Integration of Jasmine Spec framework with Node.js)
nodeunit(GitHub - caolan/nodeunit: Easy unit testing in node.js and the browser, based on the assert module.)
  • assertを使用したシンプルなテスト
  • ブラウザ側でテストを走らせることもできる
  • 非同期テスト
  • HTML/JUnit形式のXML出力に対応
    • 出力のカスタマイズが容易らしい
Tobi(GitHub - LearnBoost/tobi: Tobi: Expressive server-side functional testing with jQuery)
  • Browserオブジェクトによりブラウザの動作をエミュレート
  • jQuery及びjsdomを利用して、DOMにアクセスしてテストできる
nClosure(NClosure - Closure Tools on Node)
  • Google Closure LibraryのNode版
  • テストの他、Closure Conpiler(圧縮、最適化)、スタイルチェッカなどのツールを含む
  • クライアント側もClosure Libraryを使っているならこれかな?

Spy, Stub, Mock ...

Sinon.JS(GitHub - sinonjs/sinon: Test spies, stubs and mocks for JavaScript.)