【问题标题】:stub a private function using sinon使用 sinon 存根私有函数
【发布时间】:2021-02-20 18:21:48
【问题描述】:

我想对给定文件未公开的函数存根。

我的代码如下:

const inner = function inner(){
    return Math.random()
}

const outer = function outer(){
    if (inner()>0.5)
        return true
    return false
}

module.exports = {
    outer,
}

要测试外部方法,我需要存根内部方法。 到目前为止我尝试了什么:

const sinon = require('sinon')
const fileToBeTested = require('./my-tiny-example')

sinon.stub(fileToBeTested, 'inner')
     .returns(0.9)
console.log(fileToBeTested.outer())

我得到的错误:

TypeError: Cannot stub non-existent property inner

任何关于我使用 sinon 进行存根的建议。

谢谢

【问题讨论】:

    标签: javascript function unit-testing sinon stub


    【解决方案1】:

    您可以使用rewire 包来存根inner 函数而不导出它。

    例如

    my-tiny-example.js:

    const inner = function inner() {
      return Math.random();
    };
    
    const outer = function outer() {
      if (inner() > 0.5) return true;
      return false;
    };
    
    module.exports = {
      outer,
    };
    

    my-tiny-example.test.js:

    const rewire = require('rewire');
    const sinon = require('sinon');
    
    describe('64741353', () => {
      it('should return true', (done) => {
        const mod = rewire('./my-tiny-example');
        const innerStub = sinon.stub().returns(1);
        mod.__with__({
          inner: innerStub,
        })(() => {
          const actual = mod.outer();
          sinon.assert.match(actual, true);
          done();
        });
      });
      it('should return true', (done) => {
        const mod = rewire('./my-tiny-example');
        const innerStub = sinon.stub().returns(0);
        mod.__with__({
          inner: innerStub,
        })(() => {
          const actual = mod.outer();
          sinon.assert.match(actual, false);
          done();
        });
      });
    });
    

    单元测试结果:

      64741353
        ✓ should return true (68ms)
        ✓ should return true
    
    
      2 passing (123ms)
    
    --------------------|---------|----------|---------|---------|-------------------
    File                | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
    --------------------|---------|----------|---------|---------|-------------------
    All files           |   85.71 |      100 |      50 |   83.33 |                   
     my-tiny-example.js |   85.71 |      100 |      50 |   83.33 | 2                 
    --------------------|---------|----------|---------|---------|-------------------
    

    【讨论】:

      猜你喜欢
      • 2023-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-29
      • 2017-06-02
      • 2020-03-29
      • 2016-09-17
      • 2018-11-22
      相关资源
      最近更新 更多