从验收测试中触发输入的操作?

时间:2015-02-18 14:41:57

标签: ember.js

我的模板中有这个:

  {{ input
    value=model.title
    focus-out="finishEditingTitle"
    insert-newline="finishEditingTitle"
  }}

该操作是异步的。我想在用户完成文本字段编辑后测试,执行操作并将结果反映在页面上。

我试过这个

fillIn('input', 'asdf');
keyEvent('input', 'keypress', 13);

但它不会触发行动!

同时,在click('button');上执行<button {{action "save"}}>会触发操作。

如何从验收测试中触发输入操作?

小提琴:http://emberjs.jsbin.com/dapuge/1/edit?html,js,output

3 个答案:

答案 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);