簡體   English   中英

詩農不適用於導出功能

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM