2013-07-31 17 views
16

Ciao Sto costruendo un'app utilizzando AngularJS e sono bloccato nella sezione Test unità. So come scrivere test di unità per i controller e tutti, ma non so come farlo per routeProvider. Sto usando Jasmine per scrivere test di unità.Possiamo scrivere unit test per AngularJS routeProvider?

Il mio operatore di percorso sarà simile a questo;

var app = angular.module('MyApp', ['ngResource']) 

    app.config(function ($routeProvider) { 
     $routeProvider 
      .when('/', { 
      templateUrl: 'app/views/main.html', 
      controller: 'MainCtrl' 
      }) 
      .when('/home/:PartyID', { 
      templateUrl: 'app/views/home.html', 
      controller: 'HomeCtrl' 
      }) 
      .when('/edit/:PartyID', { 
      templateUrl: 'app/views/update_profile.html', 
      controller: 'EditCtrl' 
      }) 
      .when('/route', { 
      templateUrl: 'app/views/route.html', 
      controller: 'RouteCtrl' 
      }) 
      .when('/signup', { 
      templateUrl: 'app/views/signup.html', 
      controller: 'SignupCtrl' 
      }) 
      .when('/login', { 
      templateUrl: 'app/views/login.html', 
      controller: 'LoginCtrl' 
      }) 
      .otherwise({ 
      redirectTo: '/' 
      }); 
}); 

Come è possibile scrivere il test di unità per questa routeProvider utilizzando Jasmine?

+1

Credo che non si vuole scrivere dei test per routeProvider ma per controllare gli URL, invece. Questo è nel tutorial http://docs.angularjs.org/tutorial/step_07 –

+0

Quindi stai dicendo che non ho bisogno di scrivere unit test per routeProvider, piuttosto scrivere test end2end per controllare l'url. Destra? – BKM

+0

sì, routeprovider è un servizio già testato dai ragazzi angolari. usi semplicemente un'istanza per modificare l'oggetto che memorizza i tuoi URL. –

risposta

23

Sì, è possibile, è la risposta rapida e di seguito è un piccolo pezzo di codice che può essere utilizzato ed esteso per verificare che i percorsi ti portano nei luoghi che ti aspetteresti.

describe('Testing routes', function() { 
    beforeEach(module('windscreens')); 

    var location, route, rootScope; 

    beforeEach(inject(
     function(_$location_, _$route_, _$rootScope_) { 
      location = _$location_; 
      route = _$route_; 
      rootScope = _$rootScope_; 
    })); 

    describe('Login route', function() { 
     beforeEach(inject(
      function($httpBackend) { 
       $httpBackend.expectGET('login') 
       .respond(200); 
      })); 

     it('should load the login page on successful load of /login', function() { 
      location.path('/login'); 
      rootScope.$digest(); 
      expect(route.current.controller).toBe('LoginCtrl') 
     }); 
    });  
}); 
+1

Ciao Nick, grazie per questo semplice esempio. Questo mi sembra più un test di comportamento che un test unitario. –

+0

Hmmm @GregWang hai un punto. Il gelsomino è più un linguaggio BDD di quanto lo pensi TDD. –

14

Keep it simple

describe('Testing Routes', function() { 

// load the controller's module 
beforeEach(module('MyApp')); 

it('should test routes', 
inject(function ($route) { 

    expect($route.routes['/'].controller).toBe('MainCtrl'); 
    expect($route.routes['/'].templateUrl).toEqual('app/views/main.html'); 

    expect($route.routes['/home/:PartyID'].controller).toBe('HomeCtrl'); 
    expect($route.routes['/home/:PartyID'].templateUrl).toEqual('app/views/home.html'); 

    expect($route.routes['/edit/:PartyID'].controller).toBe('EditCtrl'); 
    expect($route.routes['/edit/:PartyID'].templateUrl).toEqual('app/views/update_profile.html'); 

    expect($route.routes['/route'].controller).toBe('RouteCtrl'); 
    expect($route.routes['/route'].templateUrl).toEqual('app/views/route.html'); 

    expect($route.routes['/signup'].controller).toBe('SignupCtrl'); 
    expect($route.routes['/signup'].templateUrl).toEqual('app/views/signup.html'); 

    expect($route.routes['/streamconfigs/:id'].controller).toBe('LoginCtrl'); 
    expect($route.routes['/streamconfigs/:id'].templateUrl).toEqual('app/views/login.html'); 

    expect($route.routes[null].redirectTo).toEqual('/'); 
})); 

}); 
+0

Questo mi ha davvero aiutato con alcuni test, grazie –