我们有一些想要测试的node.js代码。这些都是返回函数的模块(module.exports = function(){...})。在这个函数内部,需要引用其他的模块。现在我们想要模拟这些模块。请看下面的示例:
在这个测试中,我们希望模拟/存根函数repo.validate()。但是到目前为止,我们还没有找到任何方法来实现这一点。我们测试过的所有node.js模拟框架/库都可以模拟一个模块,然后您可以重写exports。但是在我们的情况下,该模块返回一个函数,并且在控制器中,repo已经被实例化了。我希望我的解释是可理解的:-) 感谢任何帮助。
// 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模拟框架/库都可以模拟一个模块,然后您可以重写exports。但是在我们的情况下,该模块返回一个函数,并且在控制器中,repo已经被实例化了。我希望我的解释是可理解的:-) 感谢任何帮助。