2013-10-02 2 views
7

Вот мой пробег блок, где я поставил пару свойств на rootScope, основываясь на пути расположения:

angular.module('xyz').run(['$rootScope', '$location', '$route', function($rootScope, $location, $route){ 
    $rootScope.brand = $location.path().split('/')[1]; 
    $rootScope.appName = $rootScope.brand.split('.')[2]; 
}); 

Вот тестовый модуль, который терпит неудачу:

beforeEach(module('App')); 

beforeEach(inject(function($controller, _$location_, $rootScope) { 
    $location = _$location_; 
    $scope = $rootScope.$new(); 
    AppCtrl = $controller('AppCtrl', { $location: $location, $scope: $scope }); 
})); 
it('AppCtrl has been initialized', inject(function() { 
    expect(AppCtrl).toBeTruthy(); 
})); 

Пытались что-то вдоль этих линий:

it('should set the default category to match the category_id found in location.hash', function() { 
    $browser.setUrl('http://server/#/categories/2'); 
    $browser.poll(); 
    scope.$eval(); 
    $browser.xhr.flush(); 
    expect(ctrl.selectedCategory).toBe('2'); 
}); 

не помогло.

ответ

7

Ваше решение: https://groups.google.com/d/msg/angular/F0jFWC4G9hI/FNz3oQu0RhYJ.

Чтобы сообщить вам об этом, Игорь Минар и Войта Джина являются разработчиками Angular, и последний является одним из основных лиц, выполняющих тестирование UnitularJs, поэтому обратите внимание на них.

Итак, в основном он уже использует издеваемую версию службы $location во время тестирования, и вы должны иметь возможность ее полностью контролировать.

+4

Спасибо за ваш вклад. Хотя быстрая подстановка на SO могла бы помочь: это делает качество вашего ответа более надежным и доступ к содержимому проще. – AsTeR

+0

Привет @AsTeR. Спасибо за ответ. Но я уже подытожил его в последнем абзаце (хотя я только что исправил небольшую проблему). Можете ли вы предложить обзор о том, как он может быть более полным? –

+0

Ой, думаю, я понял тебя, ты имеешь в виду добавить небольшой пример того, как его контролировать? Попался. Скоро. Спасибо @AsTeR. –

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