Sinon不适合出口功能

时间:2017-05-26 10:51:06

标签: javascript mocha sinon

我有一个非常简单的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);
  });
});

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

2 个答案:

答案 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;
}