我使用es6模块和Karma/Mocha/Sinon/Chai进行单元测试。如果我在另一个es6模块中调用了一个es6模块,我可以存根/监视第二个es6模块,如下所示:
module-a. js
export function a() {
// do something
}
模块b. js
import * as moduleA from './module-a';
export function b() {
// do something
moduleA.a();
}
使用上面的代码,我可以监视moduleA. a()并确定它何时被调用并存根moduleA.a()并强制特定的返回值。
但是,如果我有这种情况,我不能监视或存根:
module-a. js
export function a() {
// do something
}
export function b() {
// do something
a();
}
如果我尝试监视/存根函数a()在这个例子中,Sinon中的间谍/存根永远不会被调用/这是一种非常常见的情况,所以有人找到了监视/存根本地函数的方法吗?
谢谢!
我遇到了类似的问题,我正在使用以下方法,您可以添加一个默认导出,该导出是所有命名函数导出的命名变量包装器。然后,您可以使用默认导出对象引用为模块内函数调用添加前缀。在测试中,您导入默认导出,然后能够使用模块内函数调用存根以尊重存根行为:
// MyModule.js
let MyModule;
export function myfunc2() { return 2; }
export function myfunc1() { return MyModule.myfunc2(); }
export default MyModule = {
myfunc1,
myfunc2
}
// tests.js
import MyModule from './MyModule'
describe('MyModule', () => {
const sandbox = sinon.sandbox.create();
beforeEach(() => {
sandbox.stub(MyModule, 'myfunc2').returns(4);
});
afterEach(() => {
sandbox.restore();
});
it('myfunc1 is a proxy for myfunc2', () => {
expect(MyModule.myfunc1()).to.eql(4);
});
});