2015-04-27 60 views
3

我在測試我的圖書館。問題是我在文本字段中發生了跳動,以避免經常更新。如何在AngularJS中用ng-model-options的debounce強制輸入更改觸發器?

<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'); 
}) 

它會失敗,因爲我要補充$超時。所以10次測試= 5秒延遲是不合適的。

我該如何強制change觸發器來避免反彈或觸發blur

回答

1

好像只是用$timeout即使沒有delay開了竅:

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

嘲笑$timeout服務有一個flush方法,你可以用它來觸發單元測試的更新。

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