[英]unit-testing functions in module
好的,我是第一次使用Mocha&Sinon认真学习单元测试。
因此,假设的哑模块包含函数foo
和bar
。 Foo
取决于bar
。
(function() {
var bar = function(callback) {
if (willOfTheGods) {
callback('err', null);
} else
callback(null, 'hurrah');
}
var foo = function() {
bar(function(err, res) {
//blah deh blah
});
}
module.exports = {
bar: bar,
foo: foo
}
})();
我想对bar
进行存根以便可以测试foo
。
从Sinon文档看来这是合乎逻辑的...
var myModule = require('../myModule');
sinon.stub(myModule, 'bar')
myModule.bar.callsArgWith(0, ['err', null]);
但仅当我在测试本身中调用bar
,它才有效。
myModule.bar(function(err, result){
console.log('err, result');
});
当我调用myModule.foo
它仍然使用原始的“未插入的”。
似乎创建存根只是为该函数创建一个新的局部变量,而不是在模块中存根。
还是我完全错过了某些东西-或者只是做错了什么?
好的,一些研究表明,像这样的存根只是替换了module.exports属性的值,而不是底层函数。 因此,我需要使用诸如rewire之类的东西才能真正进入模块内部。
因此,现在,如果我放弃Sinon存根并执行以下操作:
var myModule = rewire('../myModule');
myModule.__set__('bar', function(callback){
callback('err', null);
});
它的工作原理 仅当我从myModule中删除自动执行的函数包装(function(){ ... })();
即remove (function(){ ... })();
。 我的理解是,这是一种最佳实践……但可能仅在浏览器中? 我猜整个问题都在那里。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.