我有一个非常简单的JS lib(称为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);
});
});
测试失败了。我如何确保测试通过?
答案 0 :(得分:1)
因为在foo()
中,您调用了bar()
,它是trysinon.js的内部函数。此bar()
与您导出的存根的bar()
不同。最好的方法是将trysinon
更改为类,或在bar()
中调用导出的foo()
,如下所示。
function bar() { return 2; }
module.exports.bar = bar;
function foo() {
module.exports.bar();
}
module.exports.foo = foo;
然后您可以使用bar()
sinon.stub(trysinon, 'bar').returns(2)
希望这可以帮到你。
答案 1 :(得分:1)
我改用箭头函数,它有效。
export const foo = () => {
bar();
}
export const bar = () => {
return 2;
}