2014-12-02 4 views
1

Я пытаюсь написать единичный тест для моего Служба прогресса, который управляет различными состояниями потока (переходит на следующий неполный шаг, помечает шаг как полный и т. Д.).)

Я пытаюсь настроить $ stateProvider для создания набора состояний, а затем проверить работу с ним, но я не могу изменить состояние. Конечно, я хотел бы протестировать это изолированным способом, поэтому не в зависимости от существующих состояний в моем приложении.

Вот простой тест блок:

ddescribe('Progress Steps Service', function() { 

    var sut, $rootScope, $state; 

    // holds ui.router and ProgressStepsService deps 
    beforeEach(module('Core')); 

    beforeEach(inject(
     function(_$rootScope_, _$state_) { 
      $rootScope = _$rootScope_; 
      $state = _$state_; 
     } 
    )); 

    beforeEach(inject(function(ProgressStepsService) { 
     // var steps = [...]; 
     // sut = ProgressStepsService; 
     // sut.resolve(steps); 

     angular.module('TestModule', []).config(function($stateProvider) { 
      $stateProvider 
       .state('root', {url: '/root', abstract: true}) 
       .state('root.step1', {url: '/step1'}) 
       .state('root.step2', {url: '/step2'}) 
       .state('root.step3', {url: '/step3'}); 
     }); 

     $state.go('root.step1'); 
     $rootScope.digest(); 
    })); 

    it('should init from the first step', function() { 
     expect($state.$current.name).toBe('root.step1'); 
    }); 
}); 

Ошибка я получаю

Error: Could not resolve 'root.step1' from state '' 

Я принимаю '' состояние по умолчанию, и по какой-то причине сконфигурированные состояния не являются судоходными. Я, вероятно, пропустил что-то очень основное.

Как настроить $stateProvider для проверки на произвольные состояния?

ответ

0

Итак, вот что я думаю, что происходит:

Я нагружал $state перед настройкой его через $stateProvider, а кроме того, я не вводя TestModule.

Я обновил код, чтобы выглядеть следующим образом:

ddescribe('Progress Steps Service', function() { 
    var sut, $state, $rootScope; 

    beforeEach(function() { 
     // var steps = [...]; 
     // sut = ProgressStepsService; 
     // sut.resolve(steps); 

     angular.module('TestModule', []).config(function($stateProvider) { 
      $stateProvider 
       .state('root', {url: '/root', abstract: true}) 
       .state('root.step1', {url: '/step1'}) 
       .state('root.step2', {url: '/step2'}) 
       .state('root.step3', {url: '/step3'}); 
     }); 

     module('Core', 'TestModule'); 
     inject(function(){}); 
    }); 

    beforeEach(inject(
     function(_$state_, _$rootScope_) { 
      $state = _$state_; 
      $rootScope = _$rootScope_; 
     } 
    )); 

    it('should transition to the first incomplete state', function() { 
     $state.go('root.step1'); 
     $rootScope.$digest(); 
     expect($state.$current.name).toBe('root.step1'); 
    }); 
}); 

, который делает трюк.

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