先日家の隅に2度の引っ越しをそのままの姿で移動してきたダンボールを整理しました。
「2004/–/–」と書いてあったものが入っていたので、10年間手つかずのダンボール、もうタイムカプセルです。。。
整理した結果9割はいらないものでした、10年前の私はバカですね、今もバカですが。

さて、今回は「testm」以外にテストを実行してくれるものはないかと探して見つけた
「karma」というものを紹介します。

はじめに

説明にあたり以下がインストール済みである事とします。
Node.js
npm

karmaはあくまで実行環境なので、テスト処理を行うライブラリが必要になります、
今回はJasmineを使用していきます。
なお今回詳しいテスト内容等は割合させていただきます。

インストール

karmaのインストール

下記を実行してkarmaをインストールします。

npm install -g karma

カバレッジ用のプラグインをインストール

下記を作業フォルダ下で実行して、カバレッジ計測に必要なモジュールをインストールします。

npm install karma-coverage --save-dev

Jasmine用のプラグインをインストール

今回はJasmineを使用して説明するので、下記を作業フォルダ下で実行してください。

npm install karma-jasmine --save-dev

※他のフレームワークを使用する場合は、フレームワークに合ったプラグインをインストールしてください

ブラウザ用のプラグインをインストール

下記を作業フォルダ下で実行して、各ブラウザでテストが行えるようにします。

npm install karma-chrome-launcher --save-dev
npm install karma-firefox-launcher --save-dev
npm install karma-ie-launcher --save-dev

設定ファイルを作成

karmaの設定ファイルを作成します、作業フォルダに移動後以下を入力してください。

karma init

すると以下のような質問が表示されますが、後で変更するのでEnterで先に進んでください。

Which testing framework do you want to use ?
Press tab to list possible options. Enter to move to the next question.
> jasmine

Do you want to use Require.js ?
This will add Require.js plugin.
Press tab to list possible options. Enter to move to the next question.
> no

Do you want to capture any browsers automatically ?
Press tab to list possible options. Enter empty string to move to the next quest
ion.
> Chrome
>

What is the location of your source and test files ?
You can use glob patterns, eg. "js/*.js" or "test/**/*Spec.js".
Enter empty string to move to the next question.
>

Should any of the files included by the previous patterns be excluded ?
You can use glob patterns, eg. "**/*.swp".
Enter empty string to move to the next question.
>

Do you want Karma to watch all the files and run the tests on change ?
Press tab to list possible options.
> yes

Config file generated at "C:\test\karma.conf.js".

設定ファイルの編集

作業ファオルダに「karma.conf.js」が作成されたと思います。
今回はjasmineでChromeとIEに出力し、カバレッジを取得する設定を行ってみます。

// Karma configuration
// Generated on Tue May 27 2014 09:51:03 GMT+0900 (東京 (標準時))

module.exports = function(config) {
  config.set({

    //使用するフレームワークを指定する
    // frameworks to use
    // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
    frameworks: ['jasmine'],

    //読み込むJSファイルを指定する
    // list of files / patterns to load in the browser
    files: [
      'web/utils.js',
      'test/utils/*.js'
    ],

    //カバレッジを使用する場合、見たいJSファイルを指定します
    // preprocess matching files before serving them to the browser
    // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
    preprocessors: {
    	'web/utils.js':'coverage'
    },

    //カバレッジを使用する場合、'coverage'を追記してください
    // test results reporter to use
    // possible values: 'dots', 'progress'
    // available reporters: https://npmjs.org/browse/keyword/karma-reporter
    reporters: ['progress', 'coverage'],

    //動作させたいブラウザを指定する
    // start these browsers
    // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
    browsers: ['Chrome','IE'],

  });
};

動かしてみる

作業フォルダで以下を入力することで起動させることができます

C:\Test>karma start

INFO [karma]: Karma v0.12.16 server started at http://localhost:9876/
INFO [launcher]: Starting browser Chrome
INFO [launcher]: Starting browser IE
INFO [IE 11.0.0 (Windows 7)]: Connected on socket sWYstSNjyRFaQcKFbIAy with id 5
0780208
INFO [Chrome 35.0.1916 (Windows 7)]: Connected on socket orTXxpfOyGg1AqUwbIAx wi
th id 52055382
IE 11.0.0 (Windows 7): Executed 119 of 119 SUCCESS (0.06 secs / 0.04 secs)
Chrome 35.0.1916 (Windows 7): Executed 119 of 119 SUCCESS (0.087 secs / 0.049 se
cs)
TOTAL: 238 SUCCESS

エラーが発生しなければ、設定しておいたブラウザが立ち上がり実行結果が表示されます。

ガバレッジを確認する

ガバレッジを出力する設定をしている場合、「coverage」下に保存されます。
「index.html」を開くと、以下のようにカバレッジが出力されるはずです。

終了する

終了する場合は「Ctrl+c」で終わらせます。

バッチ ジョブを終了しますか (Y/N)? y

最後に

簡単なプログラムなら問題なく動かせました。
でも少し複雑なプログラムになると、動いてくれないことがあり、
もっとしっかり調べてみる必要がありそうです。。。