この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
mochaとは
mocha(モカ)は、javascriptの単体テストでよく使用されているテストフレームワークです。 node.jsやブラウザから実行ですることもできます。また、非同期のテストも可能になってます。 なお、mocha自体はアサーション機能は持っていません。なので、値の検証は標準のassertとかchaiとかshouldを使用します。 TDDやBDDスタイルでテストを記述でき、テスト結果もいろいろな形式で出力できます。 今回はmochaの基本的な使用方法について紹介します。
環境構築方法
今回使用した動作環境は以下のとおりです。
- OS : MacOS X 10.7.4
- Node.js : v0.8.15
- npm : 1.1.66
適当なディレクトリを作成し、そこでnpmを使用してmochaをインストールします。 mochaコマンドを使用するので、gオプションつきでインストールしましょう。
% mkdir mocha
% cd mocha
% npm install -g mocha
テストを書いてみる
モジュールの作成
まずはテスト対象のモジュールを作成しましょう。 シンプルな関数を2つ持つ、myModule.jsファイルを作成します。 なお、greetAsyncはコールバックを受け取る非同期関数になっています。
//myModule.js
exports.greet = function(name) {
return "Hello,"+ name;
}
exports.greetAsync = function(name,callback) {
var greet = "Hello,"+ name;
callback(greet);
}
テストモジュールの作成
次にテストモジュールを作成してみます。同じディレクトリにtest.jsを作成しましょう。 describeとitを使用してテストケースを区切ります。テストケース内ではassertモジュールを使用して値の検証をしています。
var assert = require('assert');
var myModule = require('./myModule');
describe('myModule', function () {
describe('greet', function () {
it('引数に応じて決まった文字列を返すこと', function () {
assert.equal(myModule.greet('taro'), 'Hello,taro');
});
});
});
テスト実行
テストを実行してみましょう。 mocha <テストモジュール名>でテストが実行されます。
% mocha test.js
․
1 test complete (1 ms)
非同期のテスト
greetAsync(非同期関数)のテストも追加してみましょう。この関数は、コールバック内でアサーションを行なっています。
describe('myModule', function () {
describe('greet', function () {
it('引数に応じて決まった文字列を返すこと', function () {
assert.equal(myModule.greet('taro'), 'Hello,taro');
});
});
describe('greetAsync', function () {
it('引数に応じてコールバック内で決まった文字列になること', function (done) {
myModule.greetAsync('hanako', function (greet) {
assert.equal(greet, 'Hello,hanako');
done();
});
});
});
});
最後にdoneという関数を呼び出しています。この関数が呼ばれるまで次のテストは実行されません。
beforeとafter
describe関数やit関数が実行されるごと、または実行された後に特定の処理を行いたいケースがあります。 そのようなときに使用する関数があります。下記定義をtest.jsに追加してみましょう。
var assert = require('assert');
var myModule = require('./myModule');
before(function (done) {
console.log('[describe]before test')
done();
});
after(function (done) {
console.log('[describe]after test')
done();
});
beforeEach(function (done) {
console.log('[it]before every test');
done();
});
afterEach(function (done) {
console.log('[it]after every test')
done();
});
・
・
・
beforeは全テスト前、afterは全テスト後、beforeEachはitの前、afterEachはitの後に毎回実行されます。
出力形式
いままでのテスト結果は出力形式(reporter)が非常にシンプルなものでしたが、mochaではいろいろな形式のテスト結果を指定できます、 specというreporterを指定してみましょう。reporterは「-R」か「--reporter」で指定します。
% mocha -R spec test.js
myModule
greet
✓ 引数に応じて決まった文字列を返すこと
greetAsync
✓ 引数に応じてコールバック内で決まった文字列になること
spec以外にもlist、progress、tap、jsonなど、さまざまなreporterが指定可能です。
ファイルの変更監視
テストの変更を検知して自動で実行する機能もあります。 下記コマンドを入力してください。コンソールに「watching」と表示され、待ち状態になるはずです。
% mocha -w test.js
この状態でtest.jsを変更すると、テストが実行されます。
まとめ
今回は高機能なテストフレームワーク、mochaについて紹介しました。 このフレームワークは非常に高機能で、紹介した以外にもいろいろな機能を持っています。 詳しくは公式サイトをご確認ください。