如何在测试函数中调用对外部模块的调用

时间:2016-03-29 23:05:36

标签: javascript unit-testing sinon

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

element.funcCall();

函数如下所示:

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

失败了:undefined不是对象(评估'external.a.b.c.doSomething')

我怎样才能存根或伪造这样,这样就不会打电话。我不需要这个测试的功能。

2 个答案:

答案 0 :(得分:2)

以下是我如何做这件事:

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();
    });

});

答案 1 :(得分:0)

以下是我最终解决这个问题的方法。因为我不关心正在执行的外部函数,所以我假装它是这样的:

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

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

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

相关问题