Javascript 角度材质自动完成:测试事件

Javascript 角度材质自动完成:测试事件,javascript,typescript,angular-material2,Javascript,Typescript,Angular Material2,如何在“角度材质自动完成”中测试事件?我正在测试这段代码,想知道如何将事件参数传递给方法: onOptionSelect(event: MatAutocompleteSelectedEvent) { this.selectedOption = event.option.value; } 编辑:为了澄清,我想知道如何模拟类型为MatAutocompleteSelectedEvent的事件,以便在测试中将其传递给我的方法。有几个选项。您可以直接从测试调用该方法,也可以使用DebugElemen

如何在“角度材质自动完成”中测试事件?我正在测试这段代码,想知道如何将
事件
参数传递给方法:

onOptionSelect(event: MatAutocompleteSelectedEvent) {
  this.selectedOption = event.option.value;
}

编辑:为了澄清,我想知道如何模拟类型为
MatAutocompleteSelectedEvent
的事件,以便在测试中将其传递给我的方法。

有几个选项。您可以直接从测试调用该方法,也可以使用
DebugElement.triggerEventHandler
触发该方法。在这两种情况下,您都需要自己创建事件对象或模拟它并测试预期结果


如果您想强制手动选择,例如打开列表并在其中一个选项上生成单击事件,我认为这是不可能的(我已经尝试并搜索了,但没有结果-如果有人知道如何操作,请发布答案)。可以说,这是没有必要的,因为除了确保MatAutocomplete正确地进行选择之外,它不能完成上述方法中的任何一种,而且您不必测试IMO。

而不是创建整个事件对象,您只能创建一个纯对象,其值仅为测试所需,并使用as关键字通知编译器将此对象视为MatAutocompleteSelectedEvent

// given
const newValue = 'something';
const event: MatAutocompleteSelectedEvent = {
  option: {
    value: newValue
  }
} as MatAutocompleteSelectedEvent;
// when
component.onSelect(event);
// then
expect(component.selectedOption).toEqual(newValue);

也许我的问题不清楚。我肯定是直接调用该方法,因为我不需要触发该事件(正如您所指出的),我不知道如何模拟该事件。我尝试实例化一个新的MatAutocompleteSelectedEvent,但不知道如何传入构造函数参数。Hello@Devin,你解决了这个问题吗?我有相同的:/@Neamesis抱歉,我再也无法访问代码库了。也许您可以检查Angular src代码,看看它们如何处理测试?它相当全面。