2013-03-14

expect.jsでNode.jsのテストで色々試した

Node.jsでBDD / TDDするときに必要なモジュール


テストを書くときにも便利なモジュールが沢山あります。
メインで使うのはJasmineとかも良く使われてるみたいだけど、visionmedia製のmochaが扱いやすい。

mocha上では色んなアサーション系モジュールが使える。
(調べたらAssertionは断言、断定するって意味だた。なるほど。)
基本はNode.js自体で持っているAssertで良いハズなんだけども、should.jsとかexpect.jsとかchaiとか色んなものがある。

それぞれはこんなふうに書ける。(requireとかは省略)

それぞれに特徴があって、どれ使ってもなんとかなる感じ。
should => きっと〜だろう。
expect => 〜だと予想する。
みたいに、こうあって欲しいなという英語が使われていて、英語がわかれば使いやすい作りになってる。(''.should.be.empty => ""は空でなければならない。みたいな)

今使っているのはshould.jsをベースにしたexpect.js。
クロスブラウザ対応してたりどんな環境でも特に問題なく動くそうだ。


expect.jsの使い方。


色んな使い方があるけど殆どはドキュメント見ればそのとおりに動く。

基本的な所だと

aはanにも出来るくらい自然言語に近く扱えるらしい。英語出来ないと恩恵ないけどw


ちょっと詰まったのでメモ。
複数のErrorをthrowしちゃうメソッドをチェックするときはちょっと工夫が必要だった。

引数によってthrow結果が変わる場合、そのまま
expect(targetMethod(null)).to.throwError(/param is empty/);
とか書きたくなるけど、これだとtargetMethodが実行されて普通にErrorがthrowされてテストが止まってしまう。

それを回避するためにクロージャを使ってErrorの出し分けをやってみたら上手く行ったわけです。

ただテストに慣れてないだけっていう噂もあるけど、JavaScriptでテストを書くときはexpect.js使って大体のことが出来そうです。

間違ってたり、もっと良い使い方、書き方があれば勉強中なので教えてください〜〜。
よろしくお願い致します。


0 件のコメント: