我正在测试一个功能。该函数调用外部模块,使我的测试失败:
element.funcCall();
函数如下所示:
function funcCall() {
external.a.b.c.doSomething();
}
失败了:undefined不是对象(评估'external.a.b.c.doSomething')
我怎样才能存根或伪造这样,这样就不会打电话。我不需要这个测试的功能。
答案 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.....
这是内部函数调用重定向到空函数,我可以测试方法的其余部分