Unit testing 测试由“启动”触发的功能;(窗口:调整大小)";角度2中的事件

Unit testing 测试由“启动”触发的功能;(窗口:调整大小)";角度2中的事件,unit-testing,angular,jasmine,components,window-resize,Unit Testing,Angular,Jasmine,Components,Window Resize,我正在尝试测试一个由窗口调整大小事件触发的函数(带有业力)。在现实世界中,一切都正常工作,但当我尝试在测试中手动触发事件时,该函数从未被调用。这将导致测试失败 这是我的HTML: <div id="topnav" class="navbar navbar-graylight header-width" role="banner" (window:resize)="onResize($event)"></div> 这是我的测试: it(

我正在尝试测试一个由窗口调整大小事件触发的函数(带有业力)。在现实世界中,一切都正常工作,但当我尝试在测试中手动触发事件时,该函数从未被调用。这将导致测试失败

这是我的HTML:

<div id="topnav" 
     class="navbar navbar-graylight header-width" 
     role="banner" 
     (window:resize)="onResize($event)"></div>
这是我的测试:

it("Why is onResize() not being ran", () => { 
   const heroEl = fixture.debugElement.query(By.css(".navbar-graylight"));
   heroEl.triggerEventHandler("window:resize", null); 
   expect(comp.itWasTriggered).toBe(true);
});
以下是inspector中显示的内容:

<div _ngcontent-a-1="" class="navbar navbar-graylight header-width" id="topnav" role="banner">
  <!--template bindings={}-->
  <!--template bindings={}-->
</div>


我也遇到了同样的问题,并尝试了一些不同的方法。这将使其调整要触发的事件的大小,但不会设置高度或宽度:

window.dispatchEvent(new Event('resize'));
不需要任何包含,只需使用它,而不是:

heroEl.triggerEventHandler("window:resize", null); 

我有同样的问题,我解决了它使用间谍的功能触发的调整大小的事件。因此,您可以这样做:

  it('should trigger onResize method when window is resized', () => {
    const spyOnResize = spyOn(component, 'onResize');
    window.dispatchEvent(new Event('resize'));
    expect(spyOnResize).toHaveBeenCalled();
  });

这将更清楚,因为您不需要建立局部变量来检测是否触发了该事件。;)

你能确认在身体上是否能看到div“topnav”吗?你的设备添加到你的页面上了吗?@WinterSoldier:谢谢,我现在已经添加了上面检查器中显示的内容。现在你可以尝试用window.dispatchEvent(新事件('resize'))替换heroEl.triggerEventhandler();如前所述,我的调整大小事件处理设置有些不同(Observable.fromEvent(窗口,“resize”)…),但存在相同的测试问题。我可以确认@WinterSoldier对window.dispatchEvent(新事件('resize'))的建议;为我解决了测试问题。谢谢给定一个特定的高度或宽度,测试一下怎么样<代码>窗口。resizeTo似乎不会调用处理程序,并且您无法在只读
currentTarget
上设置
innerWidth
  it('should trigger onResize method when window is resized', () => {
    const spyOnResize = spyOn(component, 'onResize');
    window.dispatchEvent(new Event('resize'));
    expect(spyOnResize).toHaveBeenCalled();
  });