Jasmine というテストフレームワークを勉強中です。
Jasmine を選んだ理由
- クライアントサイドだけでなくサーバサイドもサポートしている
- わりと人気がありそう
クライアントサイドは jasmine standalone 、サーバサイドは jasmine-node が提供されている。
主観ですが、検索すると結構使われていそうでした。よらば大樹の陰。
Jasmine standalone を使ってみる
バージョン 1.3 と 2.0 系があったので 2.0 系をダウンロードしてみました。
SpecRunner.html というそれっぽいのを起動すると、同梱しているサンプルのテストの実行結果が表示されました。
SpecRunner.html 内で、フレームワークの .js とテスト対象の .js とテストコードの .js を指定して利用します。
jasmine-node を使ってみる
jasmine-node のバージョンは 1.14.3 となっていて、standalone と足並みそろってないのかなと思いました。
こちらは実行対象をファイル単位で指定せず、ディレクトリ単位です。
クライアントサイドのテストコードとの大きな違い
- クライアントサイドでは script タグで読み込むファイルを require で読み込む。
- テスト対象の関数の代入先が違う。
クライアントサイドでは単純に関数を定義するだけでした。 var func1 = function(){...}
- jasmine-node では、 exports.func1 = func1; としたりして、 exports のプロパティに設定する必要がある。
- これは Jasmine というよりクライアントサイドと node.js の違いかもしれません。
できたらクライアントサイドもサーバサイドもコードを共用したい
クライアントサイドとサーバサイドでそれぞれネットで見つけた FizzBuzz のテストケースを実行できました。
できましたが、まだ不満があります。前述した違いを除くと、テストコードが同じであることです。
同じようなコードをクライアントサイドとサーバサイドの両方で書くことは、DRY のポリシーに反するような気がします。
そこで、同じファイルで実行できないか模索中です。
これは、 Jasmine というよりもクライアントサイドと node.js の話になり、まだまだ難航しているので別に書きたいです。
ぐぐってみると、 typeof window === 'undefined' という条件で分岐させるなどの方法がでているのですが、やり方が悪いらしくうまくいっていません。
クライアントサイドと node.js でコードとそのテストケースを共用できるようにもう少し調べてみます。
コメント
コメントを投稿