JavaScriptのテスティングフレームワーク周りを非常に簡単に眺めてみる
はじめに
仕事でJavaScriptを書くことになりそうなので簡単に調べて並べてみました.
QUnit
概要
- xUnit for JavaScript/JQuery
- [QUnit]テストコードを実行し、ブラウザで結果を確認する | 書籍転載:JavaScriptライブラリ実践活用[厳選111] - Build Insider
- QUnitの基本的な使い方 - Block Rockin’ Codes
- PhantomJSやJsTestDriverと組み合わせて使える 0-9, JsTestDriverとphantomjsとJenkinsを使ってのJSの継続的なテスト
- 単体でも使えるし,他のテストドライバーと組み合わせても使える
導入方法
- GitHubから必要なソース一式を取得
- プロダクトコードを任意のディレクトリに用意(わかりやすければどこでも)
- 指定ディレクトリにテストコードを用意(自分で適当なテストコードディレクトリ掘ってもいい)
- test/index.htnlにテストコードとプロダクトコード,QUnit本体を読み込むように設定
- テストを書いてindex.htmlを読みます
日本語を使いたい場合はindex.htmlに以下を追加する
<meta charset="UTF8">
PhantomJS
概要
- これ自体はテスティングフレームワークでもなく,ブラウザでもなく,ブラウザエンジンを搭載したJavaScriptを動かすためのツール
- PhantomJS: Headless WebKit with JavaScript API
- PhantomJSを試してみる - 偏った言語信者の垂れ流し
- PhantomJSはヘッドレスのWebKitをJavaScriptAPIで使えるようにしたもの。ライセンスはNewBSD。
- JavaScriptの実行環境が含まれているが、Node.jsではなくWebKitのJavaScriptCore(node.jsではない理由はPhantomJS: FAQを参照)
- コマンドでのテスト、Webスクレイピング、ページのキャプチャ取得、ネットワークの監視等にも利用可能
導入方法
- ソースコードをビルドするか,バイナリをダウンロードしてインストール
- パスを通すといい感じになる
参考サイトよりスクリーンショットを撮るサンプルは以下のコード
var page = require('webpage').create();
var url = 'http://www.google.co.jp/';
page.open(url, function(status) {
page.render('google.png');
phantom.exit();
});
実行は $ phantomjs screenshot_google.js
とか
用語
JsTestDriver
概要
- Google製JavaScriptテスティングフレームワーク
- js-test-driver - Remote javascript console - Google Project Hosting
- 本体はjarファイルに固められたサーバで,接続しにきたブラウザを捕まえて,そのブラウザにJavaScriptを実行させる
- 最近はカバレッジも取れるらしい
- テストコードはxUnit方式で書く
- 複数のブラウザで同時にテストを走らせることが出来る
導入方法
- フレームワークで実践! JavaScriptテスト入門(4):WebブラウザでJavaScriptをテストする「js-test-driver」とQUnit、Jasmineを連携してテストするには (1/4) - @IT(基本的な使い方はこっちが見やすい)
- JsTestDriverで簡単テスト : アシアルブログ や 0-9, JsTestDriverとphantomjsとJenkinsを使ってのJSの継続的なテスト を参考に
- Downloads - js-test-driver - Remote javascript console - Google Project Hostingからバイナリをダウンロード
- 上の参考サイトを参考に配置する
- テスト実行設定ファイル
JsTestDriver.conf
をYAML形式で記述 $ java -jar $JSTESTDRIVER_HOME/JsTestDriver-1.3.4.b.jar --port 4224
とかでサーバを起動- ブラウザで(上の例だと)
http://localhost:4224
に接続し,表示されたリンクを選択(基本的には上でおk) $ java -jar $JSTESTDRIVER_Home/JsTestDriver-1.3.4.b.jar --tests all
を実行してテスト開始- 結果がコンソール上に表示される
結論
- 若干手間が多い
- が,複数ブラウザを同時に動かせるのはいい
Jasmine
概要
- BDD指向なテスティングフレームワーク
- QUnitと同様にPhantomJSやJsTestDriverと共に使える
- つまりブラウザベースでもコマンドラインベースでも動作させられる
- 動かすまでが大変?RubyGem使えないと面倒だという噂だけど,スタンドアローン版なら問題ない?
導入方法
- 基本的にダウンロードして展開するだけ.
作法などは公式サイトなどを参照のこと
$ wget https://github.com/downloads/pivotal/jasmine/jasmine-standalone-1.2.0.zip
# 圧縮時にディレクトリを含まずに圧縮されているため、-d必須
$ unzip jasmine-standalone-1.2.0.zip -d jasmine
$ cd jasmine
- 他のテストドライバーを使う方法は フレームワークで実践! JavaScriptテスト入門(2):PhantomJSとJasmineで振る舞い駆動開発なJavaScriptテスト (2/3) - @IT などを参照
結論
- xUnitになれてる場合RSpec的な書き方はちょっと戸惑うかも
- 単体で動かす場合にWebサーバ用意するのがちょっと面倒かも
- BDDで書けるとTDDしやすいのかな
SinonJS
- Sinon.JS - Versatile standalone test spies, stubs and mocks for JavaScript
- テスティングフレームワークではなく,ライブラリ
- spies, stubs and mocksのライブラリ
- 各種テスティングフレームワークと連携して使う
導入方法
- 公式サイトからダウンロードしたら,よしなに配置
結論
- 各テストダブルの役目,使い方を先に知っていないと使うのが難しいんじゃないかな
mocha
概要
- Mocha - the fun, simple, flexible JavaScript test framework
- ryu22eBlog : Node.jsのテスティングフレームワーク「Mocha」(前編)
- node.js用のテスティングフレームワーク.
- should.js,chaiなどのAssertionLibraryを別途用意する必要がある(一応?標準でassertというのが付いてる?)
- mocha - node.jsでこんなのもテストしたい!! という話 - Qiita [キータ]
- 非同期処理のテストも強い?
導入方法
$ npm install -g mocha
Karma
概要
- Karma - Spectacular Test Runner for Javascript
- Google製のnode.jsベースのJavaScriptテストランナー
- JasmineやMochaなどのテストフレームワークを使用してテストを行う
- クライアントサイドのJavascriptコードのテストを簡単に実行することができるらしい
- テストを実行するとブラウザを起動してその上でテストコードを走らせるみたい
導入方法
$npm install -g karma
Buster.JS
概要
- The little book of Buster.JS — The little book of Buster.JS 0.7 documentation
- JavaScript Testing FrameworkのBusterJSを使う
- テスト駆動JavaScriptの著者が参加しているnode.jsベースのテスティングフレームワーク
- 実行環境としてブラウザかnodeかを選べる
- JsTestDriverと似ている
- BusterJSでテストに使うHTMLの設定と手動実行 - yaakaito.org
導入方法
$npm install -g buster
その他
Christian Johansen(テスト駆動JavaScriptの著者)はSinon.jsも作っている
おわりに
さてさてどれを使うことになるのでしょう.どれが来てもいいように素振りしておきます.