Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   unit тестирование angular приложений (https://javascript.ru/forum/misc/56533-unit-testirovanie-angular-prilozhenijj.html)

FanAizu 20.06.2015 18:29

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');


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

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

Arkasha69 14.10.2015 19:09

Как продвинулось изучение тестирования?
У меня сейчас тоже стоит вопрос мокать все зависимости или нет. Не подскажешь по этому поводу?


Часовой пояс GMT +3, время: 01:55.