[英]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.