nodeunitを使ったテストコード
サーバーにnodeを使いつつTDDをするためにnodeunitを使ってみた。試しにmongoDBの操作を直列で記述できるラッパーを作って、それのテストケースを3つ書いた。
テストコード
var mongodb = require('mongodb'); var Transaction = require('./mongotransaction').MongoTransaction; var db, case1 = {}; case1.setUp = function(next) { var server = new mongodb.Server("127.0.0.1", 27017, {}); db = new mongodb.Db('test', server, {}); next(); } case1["Open and close DB"] = function(test) { new Transaction(db) .exec(function(next) { test.equal(this.db.state, "notConnected"); next(); }) .openDB() .exec(function(next, client) { test.equal(this.db.state, "connected"); next(client); }) .closeDB() .exec(function(next, client) { test.equal(this.db.state, "notConnected"); test.done(); }) .start(); }; case1["Insert document"] = function(test) { var colName = 'unitTest'; new Transaction(db) .openDB() .removeAll(colName) .insert(colName, {name: 'Insert test'}) .find(colName, {}, {}) .openCursor('toArray') .exec(function(next, cx) { test.equal(cx.arr.length, 1); test.equal(cx.arr[0].name, 'Insert test'); test.done(); next(cx.db); }) .closeDB() .start(); } case1["Handle Exception and close DB"] = function(test) { var colName = 'unitTest'; new Transaction(db) .openDB() .removeAll(colName) .find(colName, {}, {}) .openCursor('toArray') .exec(function(next, cx) { // Throws exception (cx.arr[10] is undefined) cx.arr[10].toString(); test.ok(false, "This line shoud not be called"); }) .onFailure(function(e) { test.equal(this.db.state, 'notConnected'); test.ok(true, "handle failure succeeded"); test.done(); }) .start(); } module.exports = require('nodeunit').testCase(case1);
いいですね。QUnitよりも非同期処理のテストがスマートに書ける。
簡単な使い方は次のエントリがわかりやすい