我正在测试一个有单击输入的组件。
<div (click)="handleClick(someArgs)"></div>
现在我想验证测试中的行为。我尝试在本地元素上使用.click()
:
const elem = fixture.debugElement.query(By.css('my-selector'));
elem.nativeElement.click();
// Check for desired changes
但是,这仅在特定浏览器中起作用,因为.click()
似乎仅针对HTMlinputements(相关的stackoverflow)定义。我收到以下错误的 'undefined' is not a function (evaluating elem.nativeElement.click()')
,用于几个浏览器。
在非htmlinputelement上调用单击事件的最佳方法是什么?
我认为最好的方法是在 DebugElement
triggerEventHandler()
triggereventhandler
如果有相应的侦听器在 元素的听众集合。第二个参数是事件 处理程序期望的对象。
如果事件缺乏听众或其他问题,请考虑 调用atnationlement.dispatchevent(EventObject)
测试文档
- https://angular.io/docs/ts/latest/guide/testing.html#! #trigger-event handler
通常,当您想使用普通JS触发HTML元素时,您必须调用元素上定义的事件。
更新:如果您使用的是茉莉花,则可以尝试在元素上调用trigger
:
const elem = fixture.debugElement.query(By.css('my-selector'));
elem.nativeElement.trigger('click');