Хобрук: Ваш путь к мастерству в программировании

Модульное тестирование контроллера AngularJS с внедрением $route

Я пытаюсь написать тест для контроллера Angular, который принимает $route как инъекцию. Внутри контроллера он ссылается на этот объект в разных местах, например $route.current.params

Я пытаюсь найти лучший способ написать этот тест. Я не верю, что использование службы $location для установки URL-адреса будет работать, поскольку мне нужно выполнить модульное тестирование функций внутри контроллера, поэтому мне нужна служба $controller для создания экземпляра тестируемого контроллера.

Пока что все, о чем я могу думать, это вручную смоделировать службу $route, но это похоже на большую работу, которую нужно было сделать раньше. Проблема в том, что я не могу найти никаких примеров. Самое близкое, что я могу найти, это «Внедрение $stateParams и $state в тест jasmine angular js становится неопределенным', но это не совсем моя ситуация.

Конечно, я могу ввести $route, но у него не будет каких-либо конкретных свойств набора маршрутов. Каков общепринятый подход к этому?


Ответы:


1

Если только не тестируется модуль ngRoute (что маловероятно), его службы следует имитировать в модульных тестах, чтобы уменьшить количество движущихся частей.

Сервис $routeParams может быть рекомендован за его краткость в качестве прямой замены $route.current.params, за некоторыми исключениями, упомянутыми в руководство:

Обратите внимание, что $routeParams обновляются только после успешного завершения изменения маршрута. Это означает, что вы не можете полагаться на правильность $routeParams в функциях разрешения маршрута. Вместо этого вы можете использовать $route.current.params для доступа к параметрам нового маршрута.

17.05.2016
Новые материалы

ВЫ РЕГРЕСС ЭТО?
Чтобы понять, когда использовать регрессионный анализ, мы должны сначала понять, что именно он делает. Вот простой ответ, который появляется, когда вы используете Google: Регрессионный..

Не зря же это называют интеллектом
Стек — C#, Oracle Опыт — 4 года Работа — Разведывательный корпус Мне пора служить Может быть, я немного приукрашиваю себя, но там, где я живу, есть обязательная военная служба на 3..

LeetCode Проблема 41. Первый пропущенный положительный результат
LeetCode Проблема 41. Первый пропущенный положительный результат Учитывая несортированный массив целых чисел, найдите наименьшее пропущенное положительное целое число. Пример 1: Input:..

Расистский и сексистский робот, обученный в Интернете
Его ИИ основан на предвзятых данных, которые создают предрассудки. Он словно переходит из одного эпизода в другой из серии Черное зеркало , а вместо этого представляет собой хронику..

Управление состоянием в микрофронтендах
Стратегии бесперебойного сотрудничества Микро-фронтенды — это быстро растущая тенденция в сфере фронтенда, гарантирующая, что удовольствие не ограничивается исключительно бэкэнд-системами..

Декларативное и функциональное программирование в стиле LINQ с использованием JavaScript с использованием каррирования и генератора ...
LINQ - одна из лучших функций C #, которая обеспечивает элегантный способ написания кода декларативного и функционального стиля, который легко читать и понимать. Благодаря таким функциям ES6,..

Структуры данных в C ++ - Часть 1
Реализация общих структур данных в C ++ C ++ - это расширение языка программирования C, которое поддерживает создание классов, поэтому оно известно как C с классами . Он используется для..