我們有一些我們想要測試的node.js代碼。這些是返回函數的模塊(module.exports = function(){...})。在函數內部需要一些其他模塊。現在我們要模擬這些模塊。看下面的例子:模擬模塊,它在node.js中返回一個函數
// userRepo.js
module.exports = function(connection) {
// init the repo
var repo = DB.connect(connection);
// add validation function
repo.validate = function(data, cb) {
// do validation stuff
cb(error, result);
};
return repo;
};
// userController.js
module.exports = function(config) {
var repo = require('userRepo.js')(config.connectionStringToUserDB)
var pub = {};
pub.create = function(data, cb) {
repo.validate(data, function(err, res) {
// do some stuff
};
};
return pub;
}
// the test
var sut = require('userController.js')(anyConfig);
sut.create({}, function(err, res) {
// do some assertions here
};
所以在測試中我們想模擬/存根函數repo.validate()。但直到現在我們還是沒有辦法做到這一點。我們測試的所有node.js模擬框架/庫都可以模擬一個模塊,然後您可以覆蓋導出。但在我們的例子中,模塊返回一個函數,而在控制器中,回購已經實例化。
我希望我的解釋是可以理解的:-)
感謝您的任何幫助。
你說得對。最好是注入或獲取/設置回購輕鬆嘲笑。我的問題是,當控制器被調用時,調用者不知道回購,只有控制器知道它。但我可以注入它,並使用默認情況下,當注入回購是空的。 – 4kochi