如何使用ng-model-options在AngularJS中去抖动强制输入更改触发器?

时间:2015-04-27 19:20:40

标签: javascript angularjs

我正在测试我的图书馆。问题是我在文本域中已经去抖动以避免经常更新。

喜欢

<input ... ng-model-options="{debounce: {'default': 500, 'blur': 0} }"

但即使我尝试触发blur

,我也无法在测试中禁用它
it("""test input set with debounce""", function(){
    scope.obj = {
        name: 'John'
    }
    el = compileTemplate("<span><input ng-model=\"obj.name\" ng-model-options=\"{debounce: {'default': 500, 'blur': 0} }\"></input></span>")
    scope.$digest()
    input = el.find('input');
    expect(input.val()).toEqual('John');
    angular.element(input).val('Max').trigger('change').trigger('blur')
    scope.$apply()
    expect(scope.obj.name).toEqual('Max');
})

它会失败,因为我必须添加$ timeout。所以10次测试= 5秒延迟是不合适的。

如何强制change触发以避免去抖或触发blur

2 个答案:

答案 0 :(得分:3)

模拟的$timeout服务有一个flush方法,您可以使用它来触发单元测试中的更新。

it('should set with debounce', inject(function ($timeout) {
    input.val('Max').triggerHandler('input');
    $timeout.flush();
    expect(scope.obj.name).toEqual('Max');
}));

答案 1 :(得分:1)

似乎只是使用$timeout即使没有delay就可以了:

$timeout(function(){
    expect(scope.obj.name).toEqual('Max');
})