Javascript Sinon不适用于导出函数

Javascript Sinon不适用于导出函数,javascript,mocha.js,sinon,Javascript,Mocha.js,Sinon,我有一个非常简单的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() {

我有一个非常简单的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()
中调用exported
bar()
,如下所示

function bar() { return 2; }
module.exports.bar = bar;

function foo() {
  module.exports.bar();
}
module.exports.foo = foo;
然后您可以使用
sinon.stub(trysinon,'bar')存根
bar()
。返回(2)

希望这能对您有所帮助。

因为在
foo()
中,您调用了
bar()
,这是trysinon.js的内部函数。此
bar()
与导出的
bar()
不同。最好的方法是将
trysinon
更改为class,或者在
foo()
中调用exported
bar()
,如下所示

function bar() { return 2; }
module.exports.bar = bar;

function foo() {
  module.exports.bar();
}
module.exports.foo = foo;
然后您可以使用
sinon.stub(trysinon,'bar')存根
bar()
。返回(2)


希望这能对您有所帮助。

接受答案的可能副本对我不起作用。请参阅DreamSonic的链接答案(不是接受的答案)接受答案的可能副本对我不起作用。请参阅DreamSonic的链接答案(不是接受的答案)