2015-03-20 3 views
2

Я хотел написать модульный тест, чтобы подтвердить, что моя логика «в ином случае» работает правильно. Это, как я ожидал, чтобы сделать это:

it('should handle unknown routes properly', inject(function($location, $rootScope) { 
    $location.path('/unknown'); 

    $rootScope.$digest(); 

    expect($location.path()).toBe('/yikes'); 
})); 

Однако то, что я обнаружил, что я должен был впрыснуть $ маршрут, чтобы сделать эту работу испытания. Имейте в виду, что единичный тестовый код не должен был использовать $ route, но, видимо, ему нужно было создать экземпляр, чтобы правильно расположить $ location.

Вот вам plunkr, если вас интересует более подробная информация. Почему $ route должен быть включен только при модульном тестировании $ location?

Я вижу много дискуссий, которые, кажется, связаны:

ответ

3

Причина ваш тест не работает, потому что $route выполняет логику переадресации, и $route не создается прямо или косвенно из вашей установки. $route создается только в том случае, если он вводится как зависимость где-то, например, директива ng-view. В реальной Угловой настройке вы обычно настраиваете $routeProvider и определите ng-view где-нибудь на странице. Если нет ng-view, $route действительно не должен быть экземплярным и выполнять дополнительную логику, которая замедляет приложение. $route и ng-view предназначены для использования вместе.

Для того, чтобы получить эту работу, вы должны либо

  1. Вводят $route где-то или
  2. Сделайте $compile на элементе с ng-view. Важно, чтобы , что $route быть создан до начала неудачного местоположения или еще $route не знает перенаправить на адрес otherwise.
Смежные вопросы