【问题标题】:How to create KeyboardEvent using Typescript in IE and PhantomJS如何在 IE 和 PhantomJS 中使用 Typescript 创建 KeyboardEvent
【发布时间】:2018-01-20 21:38:43
【问题描述】:

我正在使用 Angular2 并且有一个采用 KeyboardEvent 对象的方法。我想为此方法编写测试(如果重要,请使用 Karma 和 Jasmine)。

我使用 KeyboardEvent 构造函数编写了一些内容,该构造函数在 Chrome 中运行良好,但在 IE 和 PhantomJS 中失败。有没有办法在这些浏览器中工作?

方法签名:

public onDateKeypress(evt: KeyboardEvent): boolean {
    // ...
}

当前测试示例:

let ke = new KeyboardEvent("keypress", { "key": "" + i, });
onDateKeypress(ke);

【问题讨论】:

    标签: javascript internet-explorer testing phantomjs keyboard-events


    【解决方案1】:

    这就是我最终的结果,我愿意接受更好的解决方案。

    let ke = <KeyboardEvent>{ "key": "" + i, };
    onDateKeypress(ke);
    

    说明: 打字稿代码将被编译成 Javascript,而 Javascript 不关心数据是什么“类型”,只关心对象具有正确的属性/方法。

    在我的例子中,onDateKeypress 方法只使用 evt 参数的“key”属性,所以这就是我需要在我的测试对象上设置的全部内容。

    需要将匿名对象转换为 Keyboard 事件,以便 Typescript 编译时不会报错,因为该方法需要一个 KeyboardEvent 类型的对象。

    【讨论】:

    • 知道为什么会这样,我是这个领域的新手,昨天以为我所有的测试都通过了(在本地运行 Chrome)被烧毁了,最终破坏了在 Phantom 中运行的构建:)
    • @GaryO'Donoghue 我已经用解释编辑了答案。希望这会有所帮助。
    • 谢谢你,你介意澄清一下为什么使用“新键盘事件”方法会导致问题,但我认为这可以完成同样的事情,它几乎看起来像是构造函数中的一个缺陷没有正确设置 'key' 属性,或者 Phantom 以某种方式处理不同的东西
    • @GaryO'Donoghue 我相信只是构造函数没有在 Phantom(或 IE)中实现,就像许多新功能没有在每个浏览器中实现一样。
    猜你喜欢
    • 1970-01-01
    • 2015-05-24
    • 1970-01-01
    • 2020-02-16
    • 1970-01-01
    • 2021-12-09
    • 2022-12-18
    • 2022-11-04
    • 1970-01-01
    相关资源
    最近更新 更多