2014年7月6日日曜日

JavaScript のテストフレームワーク Jasmine の勉強

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 でコードとそのテストケースを共用できるようにもう少し調べてみます。


0 件のコメント:

コメントを投稿