node.jsの単体テストはいくつか方法があるのですが今回は理解しやすそうなmochaを使います。
mochaとは
BDDスタイルでもTDDスタイルでも使えてグローバル変数のリーク検出までしてくれるテストフレームワークです
今回は簡単なBDDテスト行ってみます
準備
インストール
デプロイ時には使わないのでグローバルにインストールします
npm install -g mocha
テスト用コード作成
express-generatorでびゃっびゃっと動くものを作るためにwebアプリ生成機をインストールしてhello-mochaアプリを作ります
WEBアプリ作成
npm install -g express-generator
express --css stylus hello-mocha
cd hello-mocha
npm install
起動確認
npm start
Express
Welcome to Express
次にroutes/index.jsをいじって表示を変えてみます
routes/index.js
var express = require('express');
var router = express.Router();
+ router.hello = function(msg){return 'Hello '+ msg;};
+//本来はrouterじゃなくて別オブジェクトでやった方がよいが今回は簡単に説明したいのでという言い訳
/* GET home page. */
- router.get('/', function(req, res) {
+ router.get('/:msg', function(req, res) {
- res.render('index', { title: 'Express' });
+ res.render('index', { title: router.hello(req.params.msg) });
});
module.exports = router;
hello mocha
Welcome to hello mocha
Hello mocha
と表示されたと思います。これはURLの/mocha
部分をパラメーターにしてHelloをつけて表示をするように変更しました
確認できたら停止しましょう
停止
Ctrl+c
テストしてみる
テストを書く
先ほど作ったrouter.hello()
をテストしてみましょう
mochaはtestディレクトリを検知して自動実行してくれるのでtestディレクトリを作ってそこにテスト用ファイルを作成します
mkdir test
cd test
vi test.js #testディレクトリ以下であれば名前はなんでもよい
テスト作成
test/test.js
var router = require("../routes/")
var assert = require("assert")
describe('router', function(){
describe('get(/)', function(){
it('Hello mocha', function(){
var msg = 'mocha';
assert.equal('Hello ' + msg, router.hello(msg));
})
})
})
テスト実行
mocha
だけでok
$ mocha
router
get(/)
✓ Hello mocha
1 passing (4ms)
まとめ
- 5分でできたnpmはとっても便利
- レポート機能もあるのでjenkinsと連携して単体テストの可視化をしたい
- 公式がわかりやすいしmocha自体シンプルなのでとっつきやすかった
- ググれば日本語のテックブログも結構多い
- yeomanと連携して高速開発もやってみたい