angular - 在 IE11 中触发关键事件以获取 Angular

标签 angular jasmine

我正在尝试测试当 using 在输入中按下 Enter 时会发生特定的事件链。在我的测试文件中,我有一个简单的方法可以触发输入元素上的 Enter 键;

  function TriggerEnterEventOnInput() {
    const event = new KeyboardEvent('keyup', { 'key': 'Enter' });
    fixture.nativeElement.querySelector('input').dispatchEvent(event);
  }

它在 Chrome 中工作正常,但如果你在 IE 中尝试这个,你会得到一个很好的错误提示;

Object doesn't support this action

这是因为 IE 不支持 KeyboardEvent 构造函数。有没有其他方法可以触发特定的按键事件,最好不使用像 JQuery 这样的插件?!

最佳答案

由于 KeyboardEvent 构造函数在 IE 上不可用,您可以使用以下适用于所有浏览器的代码段。

 TriggerEnterEventOnInput() {

    let event: KeyboardEvent;

    try {
      event = new KeyboardEvent('keyup', { 'key': 'Enter', 'bubbles': true });
    }
    catch {
      event = document.createEvent("KeyboardEvent");
      event.initKeyboardEvent(
          'keyup', // event name e.g. keyup, keydown, keypress
          false, // canBubbleArg
          false, // cancelableArg
          null, // viewArg
          'Enter', // your keyboard press value
          0, // locationArg
          '', // modifiersListArg
          false, // repeat
          '' // locale
      );
    }
    fixture.nativeElement.querySelector('input').dispatchEvent(event);
  }

Be aware though document.createEvent("KeyboardEvent") is deprecated. https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/initKeyEvent

关于angular - 在 IE11 中触发关键事件以获取 Angular ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55113175/

相关文章:

angular - 如何在angular 2中实现aop

Angular 阻塞(同步)http 调用

html - Angular,单击提交按钮后获取并显示提交时间

backbone.js - 使用 Jasmine 模板测试 Backbone View 的最佳方法

angular - 如何提供不同的模拟服务来测试 Angular 2 组件?

angular - 为什么在添加输入类型 `url` 后 Angular 会抛出错误

css - Angular - 在路由更改时为外部元素设置动画

angularjs - 如何监视 AngularJS 中的函数

javascript - 有没有办法根据其他测试的结果来运行特定的 Protractor 测试?

jasmine - Protractor 与 Mocha 和 Chai