1

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

设置

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();
});
4

1 回答 1

2

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

您可以:

  1. 监视您所关心的元素:spyOnEvent(element, 'click')
  2. 清理测试之间的 DOM(通过.remove()ing 按钮,或清除正文的 HTML)
于 2014-02-06T21:36:58.747 回答