2013-07-30 2 views
3

Я хочу, чтобы мое приложение AngularJS создало http-запрос для извлечения информации о пользователе с сервера или перенаправления на экран входа в систему. Я реализовал это в блоке запуска основного модуля моего приложения. Но как я могу проверить код в блоке запуска? Или я должен переместить этот код инициализации в контроллер, чтобы сделать его пригодным для проверки? Я пишу свои тесты с Кармой и Жасмин.Как протестировать блок запуска модуля

Любая помощь будет оценена!

ответ

12

Вы можете получить ссылку на блок выполнения с помощью свойства _runBlocks модуля.

файл с кодом модуля:

angular.module('xmpl', []). 
    run(function() { 
    // some code here 
    }); 

Набор тестов:

var myModule = angular.module('xmpl'), 
    runBlock = myModule._runBlocks[0]; 
// Now can test the runBlock function according to your scenario 
+1

Спасибо, что работает! Но в моем случае, когда я определил свой блок выполнения следующим образом: angular.module ('app', []). Run (['dep', function (dep) {...}]); Мне пришлось получить доступ к фактической функции блока выполнения как angular.module ('app') ._ runBlocks [0] [1] –

+0

Одно из полезных замечаний заключается в том, что вы можете использовать '$ injector.invoke' для ввода зависимостей в блок выполнения. –

2

Вы проверили свойство $ routeProvider разрешения? вы можете использовать свойство разрешения, чтобы проверить статус входа пользователя и действовать соответствующим образом. см. http://www.youtube.com/watch?v=P6KITGRQujQ и http://docs.angularjs.org/api/ng.$routeProvider#when

В объекте разрешения вы можете указать имя службы и/или фабрики, которые должны быть разрешены (и, следовательно, иметь отдельные модульные тесты для службы/фабрики), или если логика проста достаточно и не нужно разламывать в своей собственной службе, вы можете просто написать новую функцию

+0

Спасибо, что указали это. Это было бы здорово, если бы я хотел проверить сеанс при каждом изменении маршрута, но поскольку я хочу сделать это только при первом входе в мое приложение, я буду полагаться на блок запуска. –

8

Одно из решений заключается в перемещении кода в блоке запуска в эксплуатацию:

angular.module('app', []) 
    .run(function(runBlockService) { 
    runBlockService.run(); 
    }); 

и написать единичные тесты для этой службы.

Смежные вопросы