我正在尝试使用nodeunit为我的简单数据库层SimpleDbLayer 编写一组测试单元。我发现它相当困难。
问题:
1)我想连接到数据库一次,并使用该连接。我不能真正使用 setUp 和 tearDown,因为它们在每次测试之前和之后运行。作为“解决方案”,我使用模块范围的变量作为范围(参见下面的代码)
2)我的简单数据库层有几个数据库驱动程序。MongoMixin 只是其中之一——我正在开发 MariaMixin 和 PostgresMixin。理想情况下,我会为每个驱动程序运行这些测试,看看它们是否有效。有没有一个好的,简单的方法来做到这一点?
3)我遇到了我的测试代码出错的情况,我得到的只是关于 test.done 没有被检测到的投诉。这里有什么我需要注意的诡计吗?
4)我做错了什么可怕的事情吗?(见代码)
var
dummy
, declare = require('simpledeclare')
, SimpleDbLayer = require('./SimpleDbLayer')
, MongoMixin = require('./MongoMixin.js')
, mw = require('mongowrapper')
, async = require('async')
;
var db, layer;
exports.createLayer = {
databaseConnect: function( test ){
mw.connect('mongodb://localhost/hotplate', {}, function( err, returnedDb ){
test.ifError( err );
db = returnedDb;
test.done( null );
});
},
makeLayer: function( test ){
var C = declare( [ SimpleDbLayer, MongoMixin ] );
layer = new C( 'test', { name: true, surname: true, age: true }, db );
test.ok( layer );
test.done();
},
deleteAll: function( test ){
layer.delete( { }, { multi: true }, function( err, howmany ){
test.ifError( err );
test.done();
});
},
insert: function( test ){
var people = [
{ name: 'Chiara', surname: 'Mobily', age: 24 },
{ name: 'Tony', surname: 'Mobily', age: 37 },
{ name: 'Sara', surname: 'Connor', age: 14 },
{ name: 'Daniela', surname: 'Mobily', age: 64 },
];
returnedPeople = [];
var functions = [];
// Populate the database
people.forEach( function( person ){
functions.push( function( done ){
layer.insert( person, { returnRecord: true }, function( err, person ){
test.ifError( err );
returnedPeople.push( person );
done( null );
})
})
})
async.series( functions, function( err, res ){
test.ifError( err );
test.done();
});
},
databaseDisconnect: function( test ){
db.close();
test.done();
},
}