我正在尝试为使用事件传播停止的Angular 4编写单元测试。
这是一个简单的场景 - 我们注册3个侦听器并在第一个侦听器中调用event.stopImmediatePropagation()。然后我们发起一个事件,并期望最后两个听众不被调用。但他们被称为。
describe('Events Testing Demo', () => {
let count = 0;
it('should test listeners', () => {
document.body.addEventListener('click', (event: MouseEvent) => {
event.stopImmediatePropagation();
console.log('listener 1 running');
count++;
event.stopImmediatePropagation();
});
document.body.addEventListener('click', (event: MouseEvent) => {
console.log('listener 2 running');
count++;
});
document.body.addEventListener('click', (event: MouseEvent) => {
console.log('listener 3 running');
count++;
});
document.body.dispatchEvent(new Event('click'));
expect(count).toEqual(1); // because of event.stopImmediatePropagation() in the 1st listener
});
});
这个描述块可以添加到任何" hello world"由Angular CLI生成的应用程序,以便查看它的实际效果。
但是在Jasmine Standalone测试中一切正常(直接在浏览器中,没有Angular),因此它似乎是Angular特定的问题。
或者这可能不是在Angular中测试DOM事件的正确方法吗?