1

私は何を間違っていますか?要素のクリック イベントで呼び出される関数をスパイしようとしていますが、テストは常に false を返します。

仕様:

describe('button', function() {
  before(function() {
    this.spy = sinon.spy(window, 'testMethod');
  });

  it('Should call testMethod', function() {
    $('#testBtn').click();

    expect(this.spy.called).to.equal(true);
  });
});

js:

$('#testBtn').on('click', testMethod);

function testMethod() {
  return true;
}
4

2 に答える 2

2

問題は、次の行が原因です。

$('#testBtn').on('click', testMethod);

testMethodスパイが設定される前に参照を取得します。したがって、スパイではなく元の関数への参照を取得します。window.testMethodクリック イベントで呼び出される関数は常に元の .xml になるため、スパイを設定しても問題ありませんtestMethod。テストを機能させるには、いくつかのオプションがあります。

  1. スパイを設定したら実行$('#testBtn').on('click', testMethod); します。beforeたとえば、フックに入れることができます。

  2. に変更$('#testBtn').on('click', testMethod);$('#testBtn').on('click', function () { testMethod(); });ます。testMethod匿名関数は、クリック イベントが処理されるたびに新しい参照を取得します。したがって、設定すると、スパイへの参照が取得されます。

コードを複製するテストを作成し、上記の 2 つの修正を使用して、ここで述べていることをテストしました。

于 2015-10-17T17:15:29.383 に答える