Показать сообщение отдельно
  #1 (permalink)  
Старый 20.06.2015, 18:29
Кандидат Javascript-наук
Отправить личное сообщение для FanAizu Посмотреть профиль Найти все сообщения от FanAizu
 
Регистрация: 08.03.2011
Сообщений: 148

unit тестирование angular приложений
Разбираюсь с 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');


а также обзан проверить с какими параметрами они были вызваны?

Если есть время и желание, то распишите, пожалуйста, поподробнее, спасибо большое.

Последний раз редактировалось FanAizu, 20.06.2015 в 18:35.
Ответить с цитированием