我的模板中有这个:
{{ input
value=model.title
focus-out="finishEditingTitle"
insert-newline="finishEditingTitle"
}}
该操作是异步的。我想在用户完成文本字段编辑后测试,执行操作并将结果反映在页面上。
我试过这个
fillIn('input', 'asdf');
keyEvent('input', 'keypress', 13);
但它不会触发行动!
同时,在click('button');
上执行<button {{action "save"}}>
会触发操作。
如何从验收测试中触发输入操作?
答案 0 :(得分:2)
您的输入中不需要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();
}
}
});
我编辑了你的例子,现在所有的测试都通过了: http://emberjs.jsbin.com/baqoguyapa/1/edit?html,js,output
答案 1 :(得分:2)
因此,您希望在执行测试之前等待以完成UI事件。
你需要继续使用承诺。如果您的需求更复杂,则必须在控制器中编写自定义代码以确保发生这种情况。 (例如:Using Ember (cli) how do I get an acceptance test to wait for a promise?)。
幸运的是,对于你的情况,已有助手负责异步,请参阅:http://emberjs.com/guides/testing/test-helpers/
实际答案,只是:
click('.title');
fillIn('input', 'asdf');
triggerEvent('input', 'blur');
注意,这不起作用:
//triggerEvent('input', 'blur');
Ember.$('<input>').blur();
答案 2 :(得分:2)
如此处所定义: http://snipplr.com/view/53641/jquery-simulate-keypress-trigger/
使用keyup而不是keypress:
fillIn('input', 'asdf');
keyEvent('input', 'keyup', 13);