我正在使用 nodejs、express 和 mongodb 开发一个 Web 应用程序。
在我列出 API 调用的“主”文件中,我包含了一个用户类,该类具有诸如 Users.authenticate(userObject, callback) 和 Users.getById(userId, callback) 之类的方法。
很抱歉这个长代码片段。这只是我的用户类的一个片段。
function Users (db) {
if (!db) {
return {'message': 'creating an instance of Users requires a database'}
} else {
this.db = db;
return this;
}
}
Users.prototype.authenticate = function (user, callback) {
if (!user.username) {
return {'message': 'Users.authenticate(user, callback) requires user.username'};
} else if (!user.password) {
return {'message': 'Users.authenticate(user, callback) requires user.password'};
} else if (!callback) {
return {'message': 'Users.authenticate(user, callback) requires callback(err, user)'};
}
this.db.collection('users', function (err, collection) {
if (err) {return {'message': 'could not open users collection'}};
/* query for the user argument */
collection.findOne(user, function (err, doc) {
if (!err) {
if (!doc) {
callback({'message': 'user does not exist'}, null);
} else {
callback(null, doc);
}
} else {
callback({'message': 'error finding user'}, null);
}
});
});
};
exports.Users = Users;
而已
我将一个开放的数据库连接传递给我的用户类,并进行如下调用:
var server = new mongo.Server('localhost', '27017', {auto_reconnect: true});
var db = new mongo.Db('supportdash', server, {"fsync": true});
// open connection to be, init users
db.open(function (err, db) {
var users = new Users(db);
users.authenticate({"username": "admin", "password": "password"}, function (err, user) {
// do something with the error, or user object
});
});
现在我的问题
我应该传递一个开放的数据库连接,还是应该传递用户类管理自己的连接所需的信息(本地主机、端口、数据库名称)?
我尝试使用 jasmine-node 设置测试,但最终遇到了很多异步数据库调用问题。我想添加一个用户,然后测试 Users.authenticate 是否正常工作。我使用了 Jasmines runs() 和 waitsfor() 异步助手,但我无法让它工作。然后我遇到了一个问题,我需要一段时间来调试(使用不同的类),而测试会为我节省很多时间。关于如何测试与 mongodb 数据库交互的类的任何建议?