如何在 AngularJS 单元测试中模拟 'keypress' 或 'keydown' 之类的事件?

How to mock an event like 'keypress' or 'keydown' in an AngularJS unit test?

我看过以前的文章,但它们似乎更新了,我碰壁了。谁能帮我找到解决办法?

我有一个包含一些事件的指令 bind。这是一个信用卡号过滤器,因此它每 4 个数字添加一个 space 以使其更易于阅读。我正在尝试通过给它输入数字 5555555555554444 来在 karma/jasmine 中对其进行测试,并期望对 5555 5555 5555 4444$viewValue 的响应,但找不到触发要触发的事件。

我已经尝试了 $setViewValue$render()$digest(),并且我已经尝试了 Whosebug 中的一些解决方案(已有一年多了),但它们似乎没有上班。

是使用jQuery的唯一解决方案吗?如果是这样,jQuery 解决方案是否仍然有效?我一直在尝试在不将 jQuery 包含到我的单元测试中的情况下执行此操作。

我正在使用的代码示例:

    elem.bind('keypress', parseKeyPress);
    elem.bind('keydown contextmenu', parseKeyDown);
    elem.bind('cut paste', parseCutPaste);

    var parseHandler= function (value) {
      return value ? returnNumbersOnly(value) : '';
    };
    ctrl.$parsers.unshift(parseHandler);
    ctrl.$formatters.unshift(parseHandler);

想法?

您应该使用 elem.trigger(...) 根据需要发出这些事件。