【发布时间】:2016-10-21 07:16:29
【问题描述】:
我是java,c#程序员,有10多年经验。现在我必须用js写一些代码,真的,我感觉就像爱丽丝梦游仙境....
我有 myModule.js :
module.exports = function (logger) {
return {
read: function (param) {
......
logger.eror(....)
},
write: function (param) {
......
logger.info(....)
}
};
}
logger.js,(遗留代码,我无法更改)看起来很相似:
module.exports = function(some_settings){
return {
info: function () {
......
},
error: function () {
......
}
};
}
重要的事情:记录器没有被 require("logger") 包含在 myModule 中,而是被注入到一些“全局”的 index.js 文件中,如下所示:
var settings = require("../someSettings.js")();
var logger = require("../logger.js")(settings);
var myModule = require("../myModule .js")(logger);
现在我想用 mocha 为 myModule 编写 UT。所以我想模拟记录器。而我面对墙壁。 我尝试了 proxyquire 但这不是很好的解决方案,因为记录器没有被要求包含在 myModule 中。 我尝试了 sinon 存根和模拟,例如:
var logger = require("logger.js");
var loggerMock = sinon.mock(logger);
var myModule= require("myModule.js")(loggerMock);
或者:
var logger = require("logger.js");
var loggerStub = sinon.stub(logger, "info", function() {return ....});
var myModule= require("myModule.js")(loggerStub);
但我仍然有一些错误,例如: “试图将未定义的属性错误包装为函数”...
请在这个 javascript freeky 世界中成为我的小白兔...
【问题讨论】:
标签: javascript node.js unit-testing mocha.js sinon