1) Зависит от случая. Если использовать - надо роутить маршруты на входной контроллер. Мне проще через хэшбэнг.
2) Никогда не встречал. Если приложение загрузилось без ошибок, все темплейты/контроллеры на месте - должно быть хорошо
3)
$stateProvider.state({name: 'foo', url: '/foo', template: 'foo'});
localhost/#/foo<!-- ссылка в разметке -->
<a data-ui-sref="foo">foo</a>
// Переход из контроллеров/сервисов итд
$state.go('foo')
4) Очень тяжелый вопрос. Ловите событие через
$rootScope.$on('$stateChangeError', function() { $state.go('404'); });
5) Нет. У каждого состояния обязательно должны быть параметры
name и
url.
6)
protractor