繁体   English   中英

如何在已测试的函数中对接收到的外部模块进行调用

[英]How to sinon stub a call to external module in a tested function

我正在测试一个功能。 该函数调用了一个外部模块,这使我的测试失败了:

element.funcCall();

该函数如下所示:

function funcCall() {
    external.a.b.c.doSomething();
}

它失败:未定义不是对象(评估“ external.abcdoSomething”)

我该如何对它进行存根或伪造,以致该呼叫不是真正的拨打电话。 我不需要此测试的功能。

这是我做这种事情的方式:

var element  = require('element'),
    external = require('external'),
    sinon    = require('sinon'),
    expect   = require('chai').expect;

describe('element.funcCall()', function() {

    before(function() {
        this.doSomethingStub = sinon.stub(external.a.b.c, 'doSomething');
    });

    it('should do something external', function() {
        element.funcCall();
        expect(this.doSomethingStub.called).to.be.true;
    });

    after(function() {
        this.doSomethingStub.restore();
    });

});

这就是我最终解决此问题的方法。 由于我不关心外部函数的执行,因此我伪造了它,如下所示:

var func = function() {};
external = 
   { a: 
      { b: 
         { c: 
            {doSomething: func}
          }
       }
   }

...
element.funcCall();
expect.....

这是内部函数调用被重定向到空函数,我可以测试方法的其余部分

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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