power-assertとmochaを使ったnodejsのテスト
昨年decodeではじめて和田卓人さんの講演を聞いて、テスト駆動開発というものを知りとても興味が湧いた。テスト環境づくりは多くのサイトで紹介されているのだけど、自分の備忘録として環境構築手順を残しておこうと思う。もちろんアサーションツールには、power-assertを使用する。
大きな流れ
- npmで必要なモジュールのインストール
- npm scriptsでテスト実行コマンド登録
- テストコードを書く
- テスト実行
1 npmで必要なモジュールのインストール
// mochaのインストール npm install --save-dev mocha // power-assertのインストール npm install --save-dev power-assert intelli-espower-loader
2 npm scriptsでテスト実行コマンド登録
testフォルダを作成して、このフォルダをテスト対象として実行するようにnpm scriptsに記述する。
// package.json ... "scripts": { "test": "mocha --require intelli-espower-loader ./test/" }, ...
3 テストコードを書く
テスト対象のコードはただの計算クラスで、2つの引数を足したり引いたりするだけ。
class Calc { static add(x, y) { return x + y; } static sub(x, y) { return x - y; } } exports.Calc = Calc;
テストコードでは、power-assertと上記テスト対象のコードをロードして、あとはテストコードの記法通り。本筋とはずれるけど、オブジェクトの分割代入便利ですね。
const assert = require('power-assert'); const {Calc} = require('../module/Calc'); // 分割代入 describe('Calcクラス', () => { it('addメソッド', () => { assert( Calc.add(1,2) === 3 ); }); it('subメソッド', () => { assert( Calc.sub(1,2) === -1 ); }); });
4 テスト実行
あとは、npm testでテスト実行できる。
実行結果はこんな感じ
Calcクラス ✓ addメソッド ✓ subメソッド 2 passing (9ms)
疑問
- DBアクセスするコードのテストはどうすればよいのだろうか?
- テストごとにDBを初期化しテスト終了後も初期化する作業が必要なのか?