使用sinon存储未导出的函数

时间:2017-01-18 13:24:12

标签: javascript unit-testing testing sinon stub

我为我的模块的doB函数编写单元测试。

我希望将doA 函数存根,不用导出它,我不希望改变doB访问doA的方式。

据我所知,它不能简单stub,因为它不在导出的对象中。

如何存根doAsinon或任何其他工具?)

function doA (value) {
   /* do stuff */
}

function doB (value) {
  let resultA = doA(value);
  if (resultA === 'something') {
     /* do some */
  } else {
     /* do otherwise */
  }
}

module.exports = exports = {
   doB
}

3 个答案:

答案 0 :(得分:2)

我最终使用rewire,我可以__get__来自模块的内部函数,stub使用sinon或使用{{ 1}}' s rewire实用程序用于调用具有替换内部值的函数

答案 1 :(得分:0)

我也使用重接线做到了。这就是我想出的

const getDemographicsFunction = { getDemographics: demographic.__get__('getDemographics') };

const stubGetDemographics = sinon
 .stub(getDemographicsFunction, 'getDemographics')
 .returns(testScores);

demographic.__set__('getDemographics', stubGetDemographics);

希望这会有所帮助

答案 2 :(得分:0)

实际上,如果您不关心获取原始函数,而只是想对它进行存根,则不需要第一部分。您可以改为执行以下操作:

function stubPrivateMethod(modulePath, methodName) {
    const module = rewire(modulePath);
    
    const stub = sinon.stub();

    module.__set__(methodName, stub);

    return stub;
}