我在控制器上为名为$scope.$watch
的范围变量定义了ctrl.test
。 $ watch的回调函数在生产部署中使用正确的值(newVal)调用,但是从Jasmine测试调用时,使用undefined
调用它。
直接访问ctrl.test
会产生正确的值。
有人可以对此有所了解吗?这是一个Plunk来摆弄。
答案 0 :(得分:3)
使用Controller As模式时,请使用函数作为监视表达式。
替换:
$scope.$watch('ctrl.test', ...
使用:
$scope.$watch(function () {
return ctrl.test;
}, ...
答案 1 :(得分:0)
在我的情况下,最好的解决方案是保持手表通常
$scope.$watch( 'myController.varToWatch', function(newVal,oldValue) {
//blabla
});
并将控制器范围附加到属性: $ scope.myController = myController;
beforeEach(inject(function(_$controller_, _$httpBackend_,_$rootScope_){
$httpBackend = _$httpBackend_;
$scope = _$rootScope_.$new();
$controller = _$controller_;
myController = $controller('settingsController', { $scope: $scope });
$scope.myController = myController;
}));
受到启发:http://juristr.com/blog/2014/11/learning-ng-testing-watch-expressions/