電算部ネットワーク講座
07
Node.js Ⅵ
目次


テストとは



品質の高いコードを書くために



テストフレームワーク



アサーションライブラリ



テストの書き方



テストの実行



mocha の便利な機能



非同期テスト



課題
テストとは


テストという言葉に、嫌なイメージを持っている方もいるかもしれません。



ですが、ここで言うテストはその類のテストとは違います。



今回扱うのは、プログラムが仕様を満たしているかどうか、検証するためのテ
ストです。
品質の高いコードを書くために


品質の高いコードを書くためには、バグが極力無いことが望ましいです。



完全に無くすことは、人間が完全でない以上無理ですが、テストコードを書く
ことによって、仕様を満たした品質の高いコードを書くことを可能にします。



テストコードを書くと、仕様を満たしているか自動的に判定することができま
す。
テストフレームワーク


前々回、 Web Application Framework を扱いましたが、テストを書くためのフ
レームワークも存在します。



今回は mocha という、ブラウザでも Node.js でも使えるテストフレームワー
クを用います。



適当な場所に移動して作業ディレクトリを作成します。



mkdir test



package.json ファイルを生成します。



npm init



テストフレームワーク mocha をインストールします。



npm install mocha --save
アサーションライブラリ


テストには、フレームワークの他に Assertion Library を使います。



この変数の値はこうあるべき、という形式で個々に条件を指定します。



今回は、様々な表記の形式が選べる Chai というライブラリを用いて説明しま
す。



早速、 npm からインストールしましょう。



npm install chai –-save
テストの書き方


例: 引数 n を渡すと、n! (nの階乗) を返す関数 factorial をテストします。

function factorial(n) {
if (typeof n !== "number")
throw new TypeError("n must be a natural number");
if (n < 0)
throw new RangeError("n must be a natural number");
if (n <= 1) return 1;
return n * arguments.callee(n - 1);
}
テストの書き方
// chai を読み込む
var expect = require("chai").expect;
describe("テスト対象の名称", function () {
it("テスト項目", function () {
// テスト対象を実行
var res = factorial(0);

// 期待する結果を定義 (例: 結果は 1 である)
expect(res).to.be.equal(1);
});
});

テストケース
テストの実行


※ package.json の “scripts”: {“test”: “mocha”} を指定した後に



npm test



mocha を global インストールしてある場合



mocha
mocha の便利な機能


before(function () {
// ここに、テストケースを実行する前に行う、前処理を記述する
});



after(function () {
// ここに、テストケースを実行した後に行う、後処理を記述する
});



it.only
特定のテストケースだけを実行 (その他のテストケースは実行されない)



it.skip OR it(引数なし)
テストケースを pending する (一時的に保留する)
非同期テスト


データベースやネットワークを利用するコードのテストを書きたい場合に必要
になります。

it("user model", function (done) {
User.find(id, function (err, user) {
expect(user).to.be.an("object");

// 最後に呼ぶ
done();
});
});
課題


前回の続きで、 express で使うモデルに対して、そのテストを書いてみましょ
う。

後期講座07