今回はQUnitを使ったテストの方法をのせたいと思います。 意外に検索しても出てこないんですよね。ほぼ自己流で完成させました。 Snowballを元に解説を進めていきたいと思います。
準備するもの
ほぼないですね。QUnit本体をダウンロードしてきて、あとはエディタさえあればそれでOKです。 ダウンロードは上のリンクのZIPってボタンを押せばOKです。
QUnitのメソッドたち
ではどんどんと書いていきます。 QUnitにはテスト用のメソッドがたくさんあります。 まずok()メソッド。
ok()
これはok(状態,メッセージ)で、状態が二重否定するとtrueになるもののときにメッセージをだします。 例えば0以外の数字は二重否定するとtrue、trueはもちろんtrue、falseはfalse、undefinedはfalse、空の文字列はfalse、なにか入っている文字列はtrueになるようです(初めて知りました)。 何に使うのかは不明です。equal()で代用できそうなので。では次equal()です。
equal()
equal(実際値,期待値,メッセージ) これは、実際値が期待値ならメッセージをだします。 例えばokという変数があって、その中に"OK"と代入したとします。 このとき、equal(ok,"OK","okはOKだよー")というテストはきちんと通りますが、 equal(ok,"NG","okはNGだよー")は通りません。エラーになります。 さっきのokも、普通にこれでいいと思うんですがね。 さて次です。次はstrictEqual()です。
strictEqual()
strictEqual(実際値,期待値,メッセージ) equalと同じなので飛ばし…ません!飛ばしませんよ! equalは==で比較しますが、strictEqualは、===で比較します。 だから、equal(3,"3","okでーす")は通りますが、 strictEqual(3,"3","okでーす")は通りません。
deepEqual()
最後にdeepEqual()です。 deepEqual(実際値,期待値,メッセージ) ==もでたし===もでたし飛ばしてOKだろう。そんなわけないです。 deepEqualでは配列やオブジェクトの比較を行います。
var obj = { foo: "bar" }; deepEqual( obj, { foo: "bar" }, "OKでーす" ); strictEqual( obj, { foo: "bar" }, "OKでーす" ); equal( obj, { foo: "bar" }, "OKでーす" );
上をやるとdeepEqual以外はエラーをはきます。 ほかにもNotDeepEqualとNotStrictEqualとかあります。でも実際値と期待値が違う場合にメッセージをはくだけでのこりは同じ動作です。だから割愛します。
テスト方法
ようやくここにきました。 長かった… ではテスト方法をざくっと解説していきます。 まずmodule()でグループ化します。必須ではないです。 また、moduleには次に書くtestメソッドの始めと終わりにやりたい処理を渡せます。
次にテスト本体を書いていきます。 test(テスト名,[テストの数],テスト)という風に書きます。 テストの数は、もし実際のテストの数とあわないとエラーをはきます。 テストの実装漏れとかを防ぎます。 テストには、関数を渡します。基本は無名関数です。 ではdeepEqualのテストを例に書いてみます。
test("deepEqualのテストとか",3,function(){ var obj = { foo: "bar" }; deepEqual( obj, { foo: "bar" }, "OKでーす" ); strictEqual( obj, { foo: "bar" }, "OKでーす" ); equal( obj, { foo: "bar" }, "OKでーす" ); })
これでようやく下準備がおわりです。 長くなったのでいちどココできります。 続きはあした書きます。