Я довольно новичок в AngularJS, и я пытаюсь изучить некоторые лучшие практики. У меня все работает, но хотелось бы добавить некоторые модульные тесты для моих модулей и контроллеров. Первый, который я ищу, - это мой AutmMule.Единичное тестирование angularJS, где run содержит HTTP-запрос?
У меня есть AuthModule. Этот модуль регистрирует фабрику под названием «AuthModule» и предоставляет такие вещи, как «setAuthenticatedUser», а также такие поля, как «isLoggedIn» и «currentUser». Я думаю, что это довольно распространенная картина в приложении AngularJS с некоторыми вариантами конкретных деталей реализации.
authModule.factory ( 'AuthModule', функция (APIService, $ rootScope) {
var _currentUser = null;
var _isLoggedIn = false;
return {
'setAuthenticatedUser' : function(currentUser) {
_currentUser = currentUser;
_isLoggedIn = currentUser == null ? false : true;
$rootScope.$broadcast('event:authenticatedUserChanged',
_currentUser);
if (_isLoggedIn == false) {
$rootScope.$broadcast('event:loginRequired')
}
$rootScope.authenticatedUser = _currentUser;
$rootScope.isLoggedIn = _isLoggedIn;
},
'isLoggedIn' : _isLoggedIn,
'currentUser' : _currentUser
}
});
Модуль имеет некоторые другие вещи, как зарегистрировать обработчик для события "loginRequired", чтобы отправить человека обратно на главном экране. Эти события поднятый AuthModule завода.
authModule.run(function($rootScope, $log, $location) {
$rootScope.$on("event:loginRequired", function(event, data) {
$log.info("sending him home. Login is required");
$location.path("/");
});
});
Наконец, модуль имеет блок запуска, который будет использовать сервис API я должен определить, вошедшего в систему пользователя формируют обратно конец.
authModule.run(
function(APIService, $log, AuthModule) {
APIService.keepAlive().then(function(currentUser) {
AuthModule.setAuthenticatedUser(currentUser.user);
}, function(response) {
AuthModule.setAuthenticatedUser(null);
});
});
Вот некоторые из моих вопросов:
Мой вопрос как бы вы тесты для этой установки? Я бы подумал, что мне нужно будет выкачать APIService? Мне тяжело, потому что я постоянно получаю неожиданный запрос POST к моей/активной функции (вызванный в APIService.keepAlive())?
Есть ли способ использовать $ httpBackend, чтобы вернуть правильный ответ на фактический вызов KeepAlive? Это помешало бы мне отмахиваться от службы API?
Должен ли я вытащить блок .run(), который получает текущий вход в систему пользователя из AuthModule и помещает его в основное приложение? Кажется, независимо от того, где я помещаю блок run(), я не могу инициализировать $ httpbackend, прежде чем загружать модуль?
Должен ли AuthModule быть его собственным модулем? или я должен просто использовать основной модуль приложения и зарегистрировать там завод?