Node.jsのTDDの演習として、フラットファイルとして保存する非常に単純な「データベース」を実装しようとしています。DBモジュールコードの最初の部分は次のとおりです。
var fs = require( 'fs' );
exports.create = function( path, readycallback ) {
new FlatFileDB( path, readycallback );
};
function FlatFileDB( path, readycallback ) {
this.path = path;
readycallback( null, this );
}
FlatFileDB.prototype.getPath = function() {
return this.path;
};
DBの作成は非同期であり、私のテストケースでは、create()関数を呼び出すと実際に2つの異なるオブジェクトが生成されるかどうかを確認するためのチェックがあります。
var vows = require('vows'),
assert = require('assert'),
fs = require( 'fs' ),
flatfileDB = require( '../lib/flatfileDB' );
var twoDBs = {};
vows.describe( 'flatfileDB' ).addBatch( {
'creating the database': {
topic: flatfileDB,
'calling create': {
topic: function( flatfileDB ) {
flatfileDB.create( './createTest', this.callback );
},
'results in an object with the path passed in': function( err, db ) {
assert.equal( db.getPath(), './createTest' );
}
},
'calling create more than once': {
topic: function( flatfileDB ) {
flatfileDB.create( './db1', function( err, newdb ) {
twoDBs.db1 = newdb;
flatfileDB.create( './db2', function( err, newdb ) {
twoDBs.db2 = newdb;
this.callback( null, twoDBs );
} );
});
},
'results in two objects with different paths.': function( err, dbs ) {
console.log( 'twoDBs. db1: ' + twoDBs.db1 + ', db2: ' + twoDBs.db2 );
console.log( 'dbs: ' + JSON.stringify( dbs ) );
assert.notEqual( twoDBs.db1.getPath(), twoDBs.db2.getPath() );
}
}
},
}).run();
ただし、これら2つのconsole.log行の出力には驚かされます。
twoDB。db1:[オブジェクトオブジェクト]、db2:[オブジェクトオブジェクト] dbs:{}
2つのDBをテストコールバックに渡すので、dbとtwoDBが何らかのオブジェクトであると期待していましたが、そうではないようです。誰かがここで何が起こっているのか私を助けることができますか?