我想测试的 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'),
现在我想编写一个测试
,断言当我设置filterText
时filteredFoos
已更新。
要正确执行此操作,我需要考虑 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/