最近自分のnode.jsプロジェクトに使ってるテスト方法を紹介します。
[-- more --]
何でテストコードを書くの?
一般的な考え方だと、テストコードを書けば、コードの信頼性が高まります。そして、プログラマーが自分の書いたコードに対して自信を持てるようになります。
もちろん、テストコードではなく、実際アプリを動かしてテストするのも問題ないですが、大きなプロジェクトやチームワークになると、このやり方は特定なコードをテストするのが難しいので、チームワークに参加するなら、テストコードを書くのが必須です。
mocha + should.js + superagent
mocha
mocha は非常に使いやすいJavaScript テストフレームワークです。バックエンドとフロントエンド両方とも使えます。
should.js
should.jsはmochaのプラグインです。should.jsを使えば
user.should.have.key('username');
このようなより自然な英語表現のコードが書けます。
superagent
superagentはhttpリクエストのライブラリです。superagentのAPIを使えば、アプリの動作などのテストコードが書けます。
サンプル
仮moduleのplayer
を作成し、player.js
として保存します。
function Player(name){
this.name = name;
}
Player.create = function(name) {
return new Player(name);
}
Player.prototype.sayHello = function(){
return 'こんにちは、' + this.name + 'です。';
}
module.exports = Player;
では、これからテストコードを書きましょう。
testフォルダを作成して、下記のコードをindex.jsとして保存します。
var should = require('should');
var Player = require('../player.js');
var p;
before(function(){
p = new Player('ChainZ');
});
describe('Player', function(){
it('はsayHello()で挨拶できます。', function(){
p.sayHello().should.exactly('こんにちは、ChainZです。');
});
});
before()
before(function(){})
はすべてのテストを実行する前に実行します。mochaにはこのような便利なhook
が他にもあります:
before(function(done) {
// すべてのテスト実行する前に実行
// ここで、データベースのクリアなどの初期化処理をすれば良いでしょう
})
after(function(){
// すべてのテスト終わった後に実行
})
beforeEach(function(){
// テスト実行する前に実行
})
afterEach(function(){
// テストのあとに実行
})
describe(description, callback)
description
はテストの説明です、普通はテスト対象のmodule名になります。
it(description, callback)
description
はmoduleの各動作のテスト説明になります。
p.sayHello().should.exactly('こんにちは、ChainZです。');
should.exactly()
はメソードが返した値を検証することができます。should
は期待値を検証するに使うメソードが多数あります、使い方はドキュメントを参考してください:<https://github.com/tj/should.js>
テストを実行
下記のコマンドを叩くと、テストが実行されます。
mocha test/index.js
結果はこうなります。
つまんなかったら、-R nyan
オプションをつけると、かわいい結果画面になります。
おまけに、テストコードを1000回実行して、猫を走らせてみました。
for (var i = 0; i < 1000; i++) {
it('はsayHello()で挨拶できます。', function(){
p.sayHello().should.exactly('こんにちは、ChainZです。');
});
}