Panda Noir

JavaScript の限界を究めるブログでした。最近はいろんな分野を幅広めに書いてます。

JavaScriptの動作テストをしてみたい人へ!QUnitを使ったwebサービスのテスト方法 (1/2)

今回は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でーす" );
})

これでようやく下準備がおわりです。 長くなったのでいちどココできります。 続きはあした書きます。