我正在爲使用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實例... –