jasmine-node とRequireJS
JavaScriptのテストツールにJasmineというものがあります。
通常はブラウザ上で動かすテストライブラリらしいのですが、jasmine-nodeというパッケージがあり、それを用いるとnode.js上でJasmineのSpecファイル(テストのソースコード)を実行できるまる。これを試す。
ディレクトリ構成
以下のようなディレクトリ構成とします。
$ tree . . ├── node_modules/ # npm (node.jsのパッケージマネージャ) のインストール先 ├── spec/ # specファイル置き場 └── src/ # ソースコード置き場
Specファイル
テストのため、以下のようなmisc.jsをsrc直下に作成すること。
'use strict'; define(function() { var module = {}; /** * テスト用に簡単に文字列を返す関数を書く。 */ module.hello = function hello() { return 'hello, world'; }; return module; });
このファイルをRequireJSを利用して読み込むと hello()関数が作成されたモジュールが返ります。
hello()関数の動作を試すSpecファイルを書きます。以下の内容でspec/misc.spec.jsを作成すること。
configでrequirejsを宣言しているのでこうなってますが、ここでテストに必要なライブラリを指定しています。その他の語彙のは こちらの Jasmine向けのサイト を参照してください。
'use strict'; requirejs(['./misc'], function(misc) { describe('misc module test suite', function() { it('misc.hello() は hello, world を返す。', function() { expect(misc.hello()).toBe('hello, world'); }); }); });
configファイル
テスト実行時にRequireJSのconfigを読み込むことができます。
実際にRequireJSを利用する際はpathsの記載など、必要な外部ライブラリの設定など記載があると思いますが、このためテストの実行時にconfigファイルを読み込めるのは非常に有用だと思います。今回はbaseUrlをsrcディレクトリに限定する設定をするので、以下の内容でsrc/config.jsファイルを作成すること。
'use strict'; var requirejs = require('requirejs'); requirejs.config({ baseUrl: __dirname + '/../src' });
テスト実行
最初に作成したディレクトリ直下で、以下のコマンドで実行できます。colorオプションは出力結果に色が付きます。runWithRequireJsオプションは、実行時のモジュールローダをnode.jsからRequireJSに置き換えます。requireJsSetUpはRequireJSのconfigファイルを指定します。最後の./spec/はSpecファイルの配置してあるディレクトリです。
$ ./node_modules/.bin/jasmine-node --color --runWithRequireJs --requireJsSetup src/config.js ./spec/ path.existsSync is now called `fs.existsSync`. . Finished in 0.011 seconds 1 test, 1 assertion, 0 failures