角度单元测试控制器
Angular Unit Testing Controllers
我的控制器除了调用服务中的方法外,不做很多其他事情,服务结束并返回其函数,我已经为服务编写了模拟http请求的单元测试。
在这种情况下,是否值得对控制器进行单元测试?如果是,我将测试什么,因为我已经测试了服务功能。
下面是我的控制器:
'use strict';
/* Controllers */
var calculatorControllers = angular.module('calculatorControllers', []);
calculatorControllers.controller('BodyController', ['$scope',
function($scope) {
$scope.toggleNavBarActive = function($event) {
$($event.currentTarget).parent().find('.active').removeClass('active');
$($event.currentTarget).addClass('active');
};
}]);
calculatorControllers.controller('CalculatorCtrl', ['$scope', 'CalculatorService',
function($scope, CalculatorService) {
$scope.orderProp = 'asc';
$scope.result = ' awaiting calculation';
$scope.sum = {};
$scope.add = function(val1, val2) {
var promise = CalculatorService.add(val1, val2);
promise.then(function(response) {
$scope.result = response;
});
};
}]);
calculatorControllers.controller('AboutCtrl', ['$scope', '$routeParams',
function($scope, $routeParams) {
}]);
在这种情况下,是否值得对控制器进行单元测试
是的,您应该以100%的覆盖率为目标,无论是控制器还是服务。我会在这里测试两件事(Jasmine):
it('inits $scope', function() {
var $scope = {};
$controller('PasswordController', { $scope: $scope });
expect($scope.orderProp).toEqual('asc');
expect($scope.result).toEqual(' awaiting calculation');
expect($scope.sum).toEqual({});
});
it('calls CalculatorService and sets the result', function() {
var $scope = {};
$controller('PasswordController', { $scope: $scope });
$scope.sum(1, 2);
expect(CalculatorServiceMock).toHaveBeenCalledWith(1, 2);
resolveCalculatorServiceMockAddSpyWith(3);
expect($scope.result).toEqual(3);
});
控制器方法不需要测试的唯一情况是
$scope.calculator = CalculatorService;
因此,所有像{{ calculator.sum(...) }}
这样的视图调用都是由服务完成的。
在其他任何情况下,都应测试控制器方法。由于CalculatorService
单元已经过测试,因此必须对其进行模拟,以便对控制器逻辑进行隔离测试。
相关文章:
- 如何在Angular单元测试中从另一个控制器的rootScope将方法添加到rootScope中
- 如何对具有多个$resource调用的角度控制器进行单元测试
- 角度单元测试控制器
- 控制器中的离子单元测试,spyOn未通过
- 如何在单元测试中注入Angular控制器
- 如何在AngularJS中承诺控制器后进行单元测试
- AngularJs的单元测试失败是因为Karma没有'无法识别$scope$控制器中的侦听器
- Angular.js中的控制器单元测试
- 角度单元测试:如何在没有范围的情况下测试控制器属性
- 单元测试AngularJS控制器,同时遵循最佳实践
- 使用特定语法对控制器进行单元测试
- Angularjs 单元测试控制器 orderBy.
- 在 angularjs 控制器中对承诺调用进行单元测试时遇到问题
- 单元测试控制器,在控制器中具有 $state.go 方法
- 依赖于 AngularJS 中表单验证的单元测试控制器
- 如何在对 AngularJS 控制器进行单元测试时模拟网络延迟
- 角度指令控制器单元测试使用窗口.确认
- Angularjs,Karma控制器单元测试注入器:modulerr
- 如何在Ember.js的控制器单元测试中设置模型数据
- 在AngularJS中模拟控制器单元测试的依赖服务