我正在测试我的图书馆。问题是我在文本域中已经去抖动以避免经常更新。
喜欢
<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
?
答案 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');
})