Разбираюсь с unit тестами для angular-а. Возникло очень много вопросов, но вот пара основных, которые больше всего не дают покоя, помоги прояснить их, пожалуйста.
1) Например, есть контроллер:
angular.module('test', [])
.controller(
'test', function($scope) {
$scope.testFn1 = function() {
...
$scope.testFn2();
...
};
$scope.testFn2 = function() {
...
};
}
);
Когда тестирую этот контроллер, а именно метод testFn1, нужно ли вешать на метод testFn2 шпиона(spy) и проверять, что при вызове testFn1 внутри был вызван метод testFn2?
2) во многих примерах по unit тестам для angular-а видел, что при тестировании контроллеров, вместо какого-нибудь сервиса делают объект-загрушку, который имеет все теже методы, что
и оригинальный сервис, и затем заменяют этот оригинальный сервис на объект-загрушку, то есть, например, вот:
angular.module('test', [])
.controller(
'test', function($scope, myService) {
$scope.testFn1 = function() {
...
myService.testFn1();
...
};
}
);
а вот тест:
var myServiceMock,
$scope;
myServiceMock = {
testFn1 = function() {
...
};
};
spyOn(myServiceMock, 'testFn1');
module('test');
inject(function($controller, $rootScope) {
$scope = $rootScope.new();
$controller('test', {$scope: $scope, myService: myServiceMock});
});
...
Нужно ли делать со всеми сервисами, которые есть в зависимостях у контроллера(если тестим контроллер), сервиса(если тестим сервис), точно также? То есть нужно ли для
всех сервисов, которые есть в зависимостях, делать моки такие, как myServiceMock?
3) Может знаете хороший проект, написанный на ангуларе, где много unit тестов написано, чтобы посмотреть эти тесты, чтобы лучше понимать?
4) Например, есть такой контроллер:
angular.module('test', [])
.controller(
'test', function($scope, myService1, , myService2, myService3) {
$scope.testFn1 = function() {
...
myService1.testFn1('hello');
myService2.testFn1('hello');
myService3.testFn1('hello');
$scope.testFn2('hello');
...
};
$scope.testFn2 = function() {
...
};
}
);
Правильно ли я понимаю, что при тестирование работы метода $scope.testFn1, я обязан проверить, что были вызваны все эти методы:
myService1.testFn1('hello');
myService2.testFn1('hello');
myService3.testFn1('hello');
$scope.testFn2('hello');
а также обзан проверить с какими параметрами они были вызваны?
Если есть время и желание, то распишите, пожалуйста, поподробнее, спасибо большое.