[英]Sinon not working for exported function
我有一个非常简单的 JS 库(称为 trysinon.js),如下所示:
export function foo() {
bar();
}
export function bar() {
return 2;
}
我有以下测试
import expect from 'expect';
import sinon from 'sinon';
import * as trysinon from 'trysinon';
describe('trying sinon', function() {
beforeEach(function() {
sinon.stub(trysinon, 'bar');
});
afterEach(function() {
trysinon.bar.restore();
});
it('calls bar', function() {
trysinon.foo();
expect(trysinon.bar.called).toBe(true);
});
});
并且测试失败。 如何确保测试通过?
因为在foo()
,你调用了bar()
,它是 trysinon.js 的内部函数。 这个bar()
与导出的bar()
不同。 最好的方法是将trysinon
更改为 class,或者在foo()
调用导出的bar()
如下。
function bar() { return 2; }
module.exports.bar = bar;
function foo() {
module.exports.bar();
}
module.exports.foo = foo;
然后你可以用sinon.stub(trysinon, 'bar').returns(2)
存根bar()
sinon.stub(trysinon, 'bar').returns(2)
希望这可以帮到你。
我改用箭头函数,它有效。
export const foo = () => {
bar();
}
export const bar = () => {
return 2;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.