jasmine-node とRequireJS

JavaScriptのテストツールにJasmineというものがあります。

通常はブラウザ上で動かすテストライブラリらしいのですが、jasmine-nodeというパッケージがあり、それを用いるとnode.js上でJasmineのSpecファイル(テストのソースコード)を実行できるまる。これを試す。

事前準備

実行用ディレクトリを作成し、中でjasmine-nodeとRequire.jsをインストールすること。

$ npm install jasmine-node requirejs

ディレクトリ構成

以下のようなディレクトリ構成とします。

$ 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