如何从 Angular -cli 4 单元测试中的输入模拟按键事件

Nik*_*kos 6 unit-testing angular-cli angular4

在 vanilla JS 中,您可以通过执行以下操作来模拟输入的键:

testComponent.dispatchEvent(new Event("keyup"))
Run Code Online (Sandbox Code Playgroud)

但是,在 angular-cli 单元测试或控制台中执行此操作不会在我的组件中触发此功能,该功能通过以下方式响应关键事件:

  @HostListener('keyup', ['$event'])
  onKeyUp(event: KeyboardEvent) {
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Tha*_*eez 11

你应该创建一个事件

const event = new KeyboardEvent('keyup', {
      bubbles : true, cancelable : true, shiftKey : false
});
Run Code Online (Sandbox Code Playgroud)

然后使用 css 选择器获取 debugElement 的引用

const input = debugElement.query(By.css('#id_of_element'));
Run Code Online (Sandbox Code Playgroud)

然后引用上一个原生 html 元素

const inputElement = input.nativeElement;
Run Code Online (Sandbox Code Playgroud)

将本机元素的值分配为 ,现在文本字段值包含 12。

inputElement.value = 12;
Run Code Online (Sandbox Code Playgroud)

最后发送 key up 事件

inputElement.dispatchEvent(event);
Run Code Online (Sandbox Code Playgroud)

它会触发该功能

不要忘记在每个之前添加以下行并确保您定义了 debugElement

debugElement = fixture.debugElement;
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你