为什么茉莉花-jquery事件间谍不一致



为什么同一个测试用例在第二次运行时会失败?

设置

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 相同)

由于某种原因,第二个断言失败,即使该案例是第一个案例的精确副本。

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

总结一下我们在上面的评论中发现的内容,似乎 DOM 在测试之间没有得到清理。由于您使用 ID #some-element绑定到单击处理程序,因此第二个测试正在监视第一个元素,但您正在单击新元素。

您可以:

  1. 准确监视您关注的元素:spyOnEvent(element, 'click')
  2. 在测试之间清理 DOM(通过.remove()按钮,或清除正文的 HTML)

最新更新