【问题标题】:AngularJS unit test for keypress event按键事件的AngularJS单元测试
【发布时间】:2013-01-29 20:34:39
【问题描述】:

我设置了一个指令,为 keydown 和 keypress 事件绑定一个函数。当输入快捷键时,该指令设置表单上输入的焦点。

<input type="text" id=txtField1" focus-key="a" />
<input type="text" id=txtField2" focus-key="b" />
<input type="text" id=txtField3" focus-key="c" />

是否可以触发按键事件来对我的指令进行单元测试?在此先感谢您的帮助。

【问题讨论】:

标签: angularjs angularjs-directive


【解决方案1】:

您可以将 jQuery 与 AngularJS 一起使用,并且您可以在 jQuery 中通过 trigger() API 调用相当轻松地做到这一点。您可以将事件传递给触发器,在这种情况下,事件是

var aEvent = jQuery.Event("keydown");
aEvent.which = 40; //this is the ASCII value of the key you want to press
$("input").trigger(aEvent);

然后重复其他字符。

【讨论】:

  • 不使用jQuery,只使用jqLit​​e会怎样?我们选择不在我们的项目中包含 jQuery(因为我们不需要它 - jqLit​​e 足以满足我们的需求)。我不愿意将 jQuery 添加为仅测试依赖项,因为这会导致我们的单元测试在与生产环境不同的环境中运行。有什么建议吗?
  • @Johnus 我想现在我会修改我的答案,老实说。可以有一个指令,甚至可以有一个使用 ng-keydown 事件的范围函数。这可能有助于测试,因为您可以调用该函数。虽然不是 100% 确定。
  • 我有类似的代码。我有一个指令属性,它监听按键事件并在模型上做一些事情。在单元测试中,我像上面的评论一样触发。但是,模型没有更新:'(
  • @Navaneeth 是不是 $digest 没有被解雇?我不知道为什么它不会。或者,也许测试正在寻找错误的模型?如果你在测试之外和测试页面上使用它会发生什么?
  • @james:我相信这不是测试的问题。 keypress 事件不会更新输入值。让我这样说。用户按下后,会在不同级别触发事件,最后会发生更新输入值的动作。所以在按键时它不会发生。所以模型也不会更新。为了对注册的回调进行单元测试,我从 $._data 数据结构中提取回调并在回调之上编写单元测试:D :)
猜你喜欢
  • 1970-01-01
  • 2015-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-27
  • 2017-04-29
  • 1970-01-01
  • 2015-04-17
相关资源
最近更新 更多