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)```