Sinon 不适用于导出功能

Hom*_*ith 3 javascript mocha.js sinon

我有一个非常简单的 JS 库(称为 trysinon.js),如下所示:

export function foo() {
  bar();
}

export function bar() {
 return 2;
}
Run Code Online (Sandbox Code Playgroud)

我有以下测试

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);
  });
});
Run Code Online (Sandbox Code Playgroud)

并且测试失败了。如何确保测试通过?

Yu *_*ang 5

因为在 中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;
Run Code Online (Sandbox Code Playgroud)

然后你可以bar()存根sinon.stub(trysinon, 'bar').returns(2)

希望这可以帮到你。