在我的Angular5应用程序中,我有一个mat-select的日期列表。当用户从选项中选择新日期时,我的selectionChange处理器将启动数据请求。
我正在尝试编写一个Jasmine测试来模拟用户交互,以验证处理是否正确完成。我不知道如何让mat-select选择一个值并发出selectionChange,就像用户做出选择一样。
我在Angular Material2 GitHub(问题5082)上看到了一个引用mat-select测试的问题 - 我试图创建一个向下箭头keydown事件来触发下一个项目的选择:
let selCtrl = fixture.nativeElement.querySelector('mat-select');
selCtrl.dispatchEvent(new KeyboardEvent({key: 'ArrowDown', code: 'ArrowDown'});
然而,这似乎没有用 - 检查我创建的事件和看似没有创建keyCode的mat-select代码,并且mat-select需要它。
我已尝试以编程方式设置控件的值,但这不会触发selectionChanged的发送。
有关如何从Jasmine测试中选择触发更改的任何建议吗?
答案 0 :(得分:1)
我要在mat-select上触发(selectionChange)事件的操作如下:
fixture.debugElement.query(By.css('mat-select')).triggerEventHandler('selectionChange', { value: { id: 1 } });
这有效,我使用的selectionChange catch函数获取了“值”对象。 SelectionChange有点不同,您传递的$ event具有所有内容,因此您需要在$event.value
selectionChange=function($event.value);
希望这能回答您的问题。