在$attr上测试$watch的角度单元
angular unit testing a $watch on an $attr
根据我的理解$attr$观察一次火灾。因此,有时在属性上使用$watch。我正在寻找一个需要ngModel的指令的单元测试
scope.$watch(attr.ngModel, function (newValue) {
minlength = parseInt(attr.minLength);
scope.minLengthValidator(newValue);
});
由于这是在Link函数中使用scope,所以我似乎可以调用$digest。
我的模拟属性开始是这样的…
html = angular.element("<input ng-model='"myUnit'" min-length='"3'">");
我不确定我是否可以在规范中重新定义element.attr('min-length')并运行$digest,或者是否有更复杂的方法,因为手表正在传递一个新值。
我的模型设置的其余部分是这样的
$rootScope = $rootScope.$new();
element = $compile(html)($rootScope);
$rootScope.$digest(element);
controller = element.controller('ngModel');
scope = element.scope();
我以前没有在属性上测试过$watch,所以如果有任何方向能让我解决这个问题,我将不胜感激。
scope.$watch(attr.ngModel, ...)
将在myUnit
作用域属性上创建一个观察程序。一旦创建了观察程序,它就不会绑定到ngModel
属性值。
它可以作为任何其他范围观察程序进行测试:
scope.myUnit = ...;
$rootScope.$digest();
expect(scope.minLengthValidator).toHaveBeenCalledWith(...);
据我所知$attr$观察一次火灾。
不,$attrs.$observe
观察器会在每次属性更改时触发,这比$scope.$watch
更可取。如手册所述,
使用$observe观察包含插值(例如src="{{bar}}")。这不仅非常有效但这也是容易获得实际值的唯一方法,因为在链接阶段,尚未评估插值因此该值此时被设置为未定义。
问题是属性属于DOM,不能干净地进行测试。对于控制器规范,$attrs
局部依赖性可以被模拟,但在指令规范中是不可能的。出于可测试性的原因,最好将属性绑定到作用域属性,并且只在不涉及$attrs
的情况下测试作用域。
相关文章:
- 我的单元测试选项是什么
- 如何在Angular单元测试中从另一个控制器的rootScope将方法添加到rootScope中
- 使用量角器的当前url单元测试的getTitle
- AngularJS指令单元测试中未定义的函数
- 如何在ember单元测试中模拟_super()方法
- 单元测试依赖关系没有被嘲笑
- 为什么不'当单元测试出现解析错误时,我的因果报应测试会失败
- 在node.js中编写单元测试的最佳方式是什么
- Ng点击-如何进行行为单元测试
- Jasmine单元测试在监视服务方法时失败
- Angular 2和服务单元测试
- 在我的目录结构中,将单元测试助手源文件放在哪里
- 如何对CSS transitionEnd事件后执行的JavaScript进行单元测试
- 使用Node.js在应用程序引擎上进行本地单元测试
- 我应该如何衡量JS的单元测试覆盖率?我可以'我对jscoverage不满意
- 如何使用KARMA对React JSX ES6代码进行单元测试
- 如何在单元测试中将存储注入Ember.Service
- 单元测试:使用酶模拟父组件中子组件的点击事件
- Javascript单元测试
- 如何在JavaScript中对箭头函数进行单元测试