1

同じテスト ケースを 2 回目に実行すると失敗するのはなぜですか?

設定

var element, elementClickSpy;
beforeEach(function() {
    element = angular.element('<div id="some-element"></div>');
    $('body').append(element);
    elementClickSpy = spyOnEvent('#some-element', 'click');
});

ケース1

最初のケースは期待どおりに機能します。

it('should work', function() {
    expect(elementClickSpy).not.toHaveBeenTriggered();
    element.click();
    expect(elementClickSpy).toHaveBeenTriggered();
});

ケース 2 (ケース 1 と同じ)

ケースが最初のケースの正確なコピーであっても、2 番目のアサーションは何らかの理由で失敗します。

it('should work again', function() {
    expect(elementClickSpy).not.toHaveBeenTriggered();
    element.click();
    expect(elementClickSpy).toHaveBeenTriggered();
});
4

1 に答える 1

2

上記のコメントでわかったことを要約すると、DOM がテスト間でクリーンアップされていないようです。ID#some-elementを使用してクリック ハンドラーにバインドしているため、2 番目のテストは最初の要素をスパイしていますが、新しい要素をクリックしています。

次のいずれかを実行できます。

  1. 関心のある要素を正確にスパイします。spyOnEvent(element, 'click')または
  2. テスト間で DOM をクリーンアップします (.remove()ボタンを ing するか、本文の HTML をクリアします)。
于 2014-02-06T21:36:58.747 に答える