为什么同一个测试用例在第二次运行时会失败?
设置
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
绑定到单击处理程序,因此第二个测试正在监视第一个元素,但您正在单击新元素。
您可以:
- 准确监视您关注的元素:
spyOnEvent(element, 'click')
或 - 在测试之间清理 DOM(通过
.remove()
按钮,或清除正文的 HTML)