У меня есть контроллер, который нуждается вещью, представленная функция маршрута постановляет:Как получить текущий контроллер маршрута (или область)?
$routeProvider.when('/some/url', {
controller: MyController,
controllerAs: 'myCtrl',
resolve: {
theAnswer: ['deepThought', function(deepThought) {
return deepThought.computeTheAnswerAndReturnAPromise();
}]
}
});
var MyController = ['$route', function($route) {
this.theAnswer = $route.current.theAnswer;
}];
Теперь я хочу сделать тест от конца до конца, проверяя, что маршрут соответствует и что параметры переданы правильно:
// ...set up the routes...
$location.path('/some/url');
$rootScope.$digest();
var ctrl = ???;
expect(ctrl.aThing).toBe(42);
В настройке без тестирования я могу записать оператор журнала и увидеть, что контроллер создается успешно и получает правильные данные. Единственная проблема: как получить контроль над контроллером в тесте?
Существует
$route.current.controller
, но он содержит функцию конструктора контроллера, а не экземпляр контроллера.В documentation обещает
$route.current.locals.$scope
, из которых я мог бы получитьmyCtrl
, но$scope
имущество фактически не существует, если мы не используемngView
(он получает набор here).Контроллер не зарегистрирован ни в одном модуле, поэтому я не могу использовать
$provide
, чтобы перехватить его создание и спрятать контроллер где-нибудь.
Не можете использовать [ '$ controller'] (https://docs.angularjs.org/api/ng/service/$controller) передать в конструктор вернулся по '$ route.current.controller'? – PSL