繁体   English   中英

模块中的单元测试功能

[英]unit-testing functions in module

好的,我是第一次使用Mocha&Sinon认真学习单元测试。

因此,假设的哑模块包含函数foobar 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM