我正在为使用MongoDB编写的NodeJS应用程序编写集成测试。如何在NodeJS中设置MongoDB进行集成测试?
在CI服务器上,我想拥有某种嵌入式MongoDB以获得更快的性能和更轻松的控制。 目前我在其他服务器上有MongoDB,但测试速度很慢。在每次测试之前,我需要删除所有集合。我使用猫鼬作为ORM。
到目前为止,我只找到嵌入式MongoDB for Java。
我正在为使用MongoDB编写的NodeJS应用程序编写集成测试。如何在NodeJS中设置MongoDB进行集成测试?
在CI服务器上,我想拥有某种嵌入式MongoDB以获得更快的性能和更轻松的控制。 目前我在其他服务器上有MongoDB,但测试速度很慢。在每次测试之前,我需要删除所有集合。我使用猫鼬作为ORM。
到目前为止,我只找到嵌入式MongoDB for Java。
我们的团队一直在蒙松蒙皮电话。根据你的测试包,你可以做同样的事情。它需要一点点工作,但它是值得的。创建一个存根函数,然后在你的测试中声明你需要的东西。
// Object based stubbing
function createObjStub(obj) {
return {
getDb: function() {
return {
collection: function() {
var coll = {};
for (var name in obj) {
var func = obj[name];
if (typeof func === 'object') {
coll = func;
} else {
coll[name] = func;
}
}
return coll;
}
};
}
}
};
// Stubbed mongodb call
var moduleSvc = new ModulesService(createObjStub({
findById: function(query, options, cb) {
return cb({
'name': 'test'
}, null);
//return cb(null, null);
}
}),{getProperties: function(){return{get: function(){} }; } });
这是一种可以完成的方式,但我会削减所有的MongoDB检查,约束和进程。 如果存在唯一的主键,则第二次写入不会返回错误。如果信息保存错误,查询错误或初始化错误,我不会注意到这一点。 –
继“不使用测试双打类型你不拥有”的原则,考虑继续使用真正的MongoDB实例进行集成测试。详情请看this nice article。
你可以在你的CI服务器上设置一个专用的MongoDB实例... –