javascript - 如何测试在 ember-qunit 中调用 Ember.run.debounce 的函数?

标签 javascript ember.js qunit ember-cli ember-qunit

我想测试的 Controller 包含以下内容:

filterText: '',
filteredFoos: (Ember.A()),

filterFoosImpl: function() {
    console.log('filterFoos begin' );
    var filterText = this.get('filterText');
    var filteredFoos = this.forEach(function(foo) {
        return (foo.get(name).indexOf(filterText) >= 0);
    });
    this.set('filteredFoos', filteredFoos);
},

filterFoos: function() {
    Ember.run.debounce(this.filterFoosImpl.bind(this), 300);
}.observes('model', 'filterText'),

现在我想编写一个测试,断言当我设置filterTextfilteredFoos 已更新。

要正确执行此操作,我需要考虑 Ember.run.debounce, 并等待它发生,然后再执行我的断言。 我该怎么做?

最佳答案

我也遇到了这个问题,为了消除 debounce,我做了以下事情:

test('it triggers external action on a keyup event', function() {
    expect(1);

    // stub out the debounce method so we can treat this call syncronously
    Ember.run.debounce = function(target, func) {
      func.call(target);
    };

    var component = this.subject();
    var $component = this.append();

    var targetObject = {
      externalAction: function() {
        ok(true, 'external action called');
      }
    };

    component.set('keyUpAction', 'externalAction');

    component.set('targetObject', targetObject);

    $component.keyup();
});

我正在测试的组件如下所示:

export default Ember.TextField.extend({    
  triggerKeyUpAction: function() {
    this.sendAction('keyUpAction', event);
  },

  keyUp: function(/*event*/) {
    Ember.run.debounce(this, this.triggerKeyUpAction, 200);

    if(!this.get('value')){
      return;
    }

    this.set('value', String(this.get('value')).replace(/[^\d\.\,]/g, ''));
  }
});

关于javascript - 如何测试在 ember-qunit 中调用 Ember.run.debounce 的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24731840/

相关文章:

javascript - 找不到我从 Typescript 构建的 javascript 类

javascript - 将 QUnit 与 JSTestDriver 结合使用

javascript - 运行 jquery 媒体查询而不重新加载

javascript - react : async setState updates to late

ember.js - 存储 pushPayload 调用后返回记录

ember.js - Ember 服务在重新加载时丢失

javascript - 如何使用纯 JavaScript 在 grunt-run qunit 测试中触发 TouchEvent?

javascript - php post 无法使用 header 和 ajax 工作

javascript - 从 ASP.NET 中的操作方法检索 Json 对象

ember.js - 每次路线改变时的触发方法