Edited at

node.js単体テスト入門

More than 3 years have passed since last update.

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

http://localhost:3000

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;


http://localhost:3000/mocha

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と連携して高速開発もやってみたい