Ember.js 触发输入';验收测试的作用是什么?
我的模板中有以下内容:Ember.js 触发输入';验收测试的作用是什么?,ember.js,Ember.js,我的模板中有以下内容: {{ input value=model.title focus-out="finishEditingTitle" insert-newline="finishEditingTitle" }} 该操作是异步的。我想测试一下,用户编辑完文本字段后,会执行操作,结果会反映在页面上 我试过这个 fillIn('input', 'asdf'); keyEvent('input', 'keypress', 13); 但它不会触发行动 同时,执行单
{{ input
value=model.title
focus-out="finishEditingTitle"
insert-newline="finishEditingTitle"
}}
该操作是异步的。我想测试一下,用户编辑完文本字段后,会执行操作,结果会反映在页面上
我试过这个
fillIn('input', 'asdf');
keyEvent('input', 'keypress', 13);
但它不会触发行动
同时,执行单击('button')
上的code>会触发该操作
如何从验收测试触发输入操作?
小提琴:在输入中不需要action='save'
,如果删除它,也不必等待单击事件。你已经有了束缚,好好利用它吧
{{input value=model.bar}}
App.IndexController = Ember.Controller.extend({
// trigger whenever the input's value changes
_save: function() {
Ember.Logger.debug('IndexController: save');
this.get('model').save();
}.observes('model.bar'),
actions: {
// trigger the action from other DOM elements
save: function() {
this._save();
}
}
});
我编辑了您的示例,现在所有测试都通过了:
因此,您希望在执行测试之前等待UI事件完成
你需要继续履行承诺。如果您的需求更加复杂,那么您必须在控制器中编写自定义代码以确保实现这一点。(例如:)
幸运的是,您的案例中已经有了处理异步的助手,请参阅:
实际答案是:
click('.title');
fillIn('input', 'asdf');
triggerEvent('input', 'blur');
注意,这不起作用:
//triggerEvent('input', 'blur');
Ember.$('<input>').blur();
//triggerEvent('input','blur');
余烬。$('').blur();
如此处所定义:
使用keyup而不是keypress:
fillIn('input', 'asdf');
keyEvent('input', 'keyup', 13);
谢谢你@givanse,这太棒了!为什么我们需要一个.observes('model.bar')
,而我们已经在操作调用的方法上得到了它?嘿@givanse,在我的应用程序中,输入是这样定义的:{input value=model.bar focus out=“finishEditingTitle”insert newline=“finishEditingTitle”}
。我认为你的建议不可能适用于我的情况(你认为呢?我们不需要动作处理程序中的观察者,这是一个输入错误,我更新了答案。你还有其他问题吗?我不知道调出焦点
和插入新行
对验收测试有何影响,我猜这些只是修改输入外观的事件。我不想发送请求。)在每次按键时都要使用后端。我只想在用户完成编辑后保存请求。这里是小提琴:是的,这适用于focus out=“someAction”
并解决了我的问题。但是如果我对insert newline=“anotherAction”有不同的操作怎么办
?如何触发该操作?连续触发两个操作。如果它们有完全不同的副作用,则是时候编写两个验收测试了。问题是如何触发插入换行符
操作,即使在单独的测试中也是如此。keyEvent(选择器、类型、keyCode)看起来使用keydown
和keyup
有效,但keypress
无效。cc:@lolmaus AndreyMikhaylovEmber现在也有一个测试助手库。答案基本相同,但是:“`import{triggerKeyEvent}from'@ember/test helpers';/…triggerKeyEvent('input','keyup',13)```