角材料自动完成:测试事件

时间:2018-08-22 18:22:07

标签: javascript typescript angular-material2

如何在Angular Material Autocomplete中测试事件?我正在尝试测试此代码,并想知道如何将event参数传递给该方法:

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

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

2 个答案:

答案 0 :(得分:2)

不是创建整个 Event 对象,您可以只创建一个具有仅测试所需值的普通对象,并使用 as 关键字通知编译器将此对象视为 MatAutocompleteSelectedEvent 。

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

答案 1 :(得分:1)

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

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