2016-04-08 4 views
0

Мой контроллер не выполняет много чего другого, кроме методов вызова в сервисе, служба завершает работу и возвращает свои функции, я уже написал модульные тесты для службы, издеваясь над 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) { 

}]); 
+0

Пожалуйста, введите код вашего контроллера. В противном случае вопрос слишком широк. – Pavlo

+0

В моем приложении большинство моих сервисов обращаются к API-интерфейсам и работают над ответом перед передачей обещания обратно контроллеру. Обычно мои контроллеры выполняют минимальную работу над ответом до того, как шаблон использует данные. Есть некоторые случаи, когда я дорабатываю данные до этого, и в этом случае он может потребовать модульного тестирования ответа. Это зависит от того, насколько просты и модульны ваши API-интерфейсы контроллера. Кстати, вы делаете джиу-джитсу? Просто спрашивайте из-за вашего имени пользователя. – jusopi

+0

Эй, да, я джиу-джитсу, не так ли? На данный момент я - фиолетовый пояс. Мне жаль, что я не был фиолетовым поясом в Angular, но я чувствую себя белым без полоски ... – berimbolo

ответ

1

ли стоит даже модульного тестирования контроллера в данном случае

Да, вы должны стремиться к% охвата 100, не имеет значения, контроллер или услугу. Я бы испытал две вещи здесь (Жасмин):

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); 
}); 
1

Единственный случай, когда методы контроллера не требуют проведения испытаний является

$scope.calculator = CalculatorService; 

Таким образом, все вызовы, такие как просмотр {{ calculator.sum(...) }} выполняется службой.

В каждом другом случае должны быть проверены методы контроллера. Поскольку блок CalculatorService уже был протестирован, его нужно издеваться, чтобы логика контроллера была протестирована изолированно.