LoginSignup
81
74

More than 5 years have passed since last update.

node.js単体テスト入門

Last updated at Posted at 2014-10-01

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
81
74