我有一个简单的控制器,只有一个方法。 我在控制器中设置了一个观察者,我想确保在更新模型时调用观察者监听器。
您知道如何检查是否调用了监听器吗?
var app = angular.module('app', []);
app.controller('MainController', ['$scope', function($scope){
$scope.test = 0;
this.method = function(){
console.log('called');
$scope.test = $scope.name.length;
};
$scope.$watch('name', this.method);
}]);
describe('controller method ', function(){
var scope;
var controller;
beforeEach(module('app'));
beforeEach(inject(function($injector){
scope = $injector.get('$rootScope').$new();
var $controller = $injector.get('$controller');
scope.name = 'blabla';
controller = $controller('MainController', { $scope: scope });
}));
it('should watch', function(){
var s = spyOn(controller, 'method');
scope.$digest();
expect(s).toHaveBeenCalled();
});
it('true should be true', function(){
expect(1).toBe(1);
});
});
答案 0 :(得分:1)
你不想窥探控制器的method
。您可能希望重命名该方法,将其拆分为多个方法,或者在将来以任何其他方式重构它们。这将破坏您的测试,而您的控制器的实际行为可能没有改变。所以专注于测试控制器行为,而不是监视私有方法。
it('should set the testing variable', function(){
// act
scope.name = 'name';
scope.$digest();
// assert
scope.testing.should.eql(4);
});