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

Dev*_*vin 5 javascript typescript angular-material2

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

onOptionSelect(event: MatAutocompleteSelectedEvent) {
  this.selectedOption = event.option.value;
}
Run Code Online (Sandbox Code Playgroud)

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

Dan*_*ski 5

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

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


G. *_*ter 1

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

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