2016-05-03 12 views
1

Ich habe in einem Projekt gearbeitet und ich habe das UI-Router-Plugin verwendet. Wenn ich die Coverage-Ebene meines Codes überprüfe, sagt mein Coverage-Tool immer in der Auflösungsfunktion Callback, dass meine Tests niemals die Auflösungsfunktion ausführen.Unit Testing in UI-Router Auflösung Callback

Meine Frage:

Wie dieser Code zu testen werden soll?

Ein Beispiel für Code:

$stateProvider 
     .state('measures.users', { 
     url: 'users', 
     views: { 
      'navbar': APP_SETTINGS.NAVBAR_SETTINGS, 
      'main': { 
      templateUrl: 'assets/views/users/users.html', 
      controller: 'UsersController', 
      controllerAs: 'users', 
      resolve: { 
       UsersResolve: ['UsersService', function(UsersService){ 

        //My coverage tool never pass in here. 
        //I need testing this area but i dont know what should be test 
        return UsersService.getUsers(); 
       }] 
      } 
      } 
     } 
     }) 

EDIT Schließlich ich testen, ob mein Dienst, wenn ich in dem Zustand 'measures.users' Übergang genannt wurde.

describe('State check', function(){ 

    var state, rootScope, UsersService; 

    beforeEach(module('exampleApp')); 
    beforeEach(inject(eachSpecSetup)); 

    function eachSpecSetup($state, $rootScope, $controller,_UsersService_){ 
     state = $state; 
     UsersService = _UsersService_; 
     rootScope = $rootScope; 
    } 

    it('should be call a UsersService.getUsers to resolve the array to state users', spec1); 

    function spec1(){ 

     spyOn(UsersService, 'getUsers'); 

     state.go('measures.users'); 
     rootScope.$digest(); 

     expect(UsersService.getUsers).toHaveBeenCalled(); 
    } 

}); 

Ein ähnliches Beispiel in here

Antwort

-1

So stellen Sie sicher, dass:

  1. url 'Benutzer' ist in Ihrem Test abgedeckt;
  2. in UsersController, haben Sie UsersResolve Service aufrufen.

Es kann einige Syntaxfehler in Ihrem resolve sein:

$stateProvider 
    .state('measures.users', { 
    url: 'users', 
    views: { 
     'navbar': APP_SETTINGS.NAVBAR_SETTINGS, 
     'main': { 
     templateUrl: 'assets/views/users/users.html', 
     controller: 'UsersController', 
     controllerAs: 'users', 
     resolve: { 
      UsersService: UsersServuce, 
      UsersResolve: function(UsersService){ 
       return UsersService.getUsers(); 
      } 
     } 
     } 
    } 
    })