2013-07-31 6 views
16

Hi I 'm budowania aplikacji przy użyciu angularjs i siedzę w dziale testów jednostkowych. Wiem, jak pisać testy jednostkowe dla kontrolerów i wszystkich, ale nie wiem jak to zrobić dla routeProvider. Używam Jasmine do pisania testu jednostkowego.Czy możemy napisać test jednostkowy dla AngularJS routeProvider?

Mój dostawca trasa będzie wyglądać następująco;

Jak mogę napisać test jednostkowy dla tej trasyPrzygotowujący przy użyciu Jasmine?

+1

Chyba nie chcesz pisać testy dla routeProvider ale zamiast sprawdzić adresy URL. To jest w tutorialu http://docs.angularjs.org/tutorial/step_07 –

+0

Więc mówisz, że nie trzeba pisać testy jednostkowe dla routeProvider raczej pisać testu end2end aby sprawdzić URL. Dobrze? – BKM

+0

tak, routeprovider to usługa już przetestowany przez kątowych facetów. wystarczy użyć instancji, aby zmodyfikować obiekt przechowujący adresy URL. –

Odpowiedz

23

Tak można, jest szybka odpowiedź i poniżej jest mały kawałek kodu, który może być używany do testowania i rozszerzonego, który kieruje cię do miejsc, jakich można oczekiwać.

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

Cześć Nick, dzięki za ten prosty przykład. To wygląda bardziej na test zachowania niż na test jednostkowy. –

+0

Hmmm @GregWang masz punkt. Jasmine jest bardziej językiem BDD niż ty. –

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

To naprawdę pomogło mi w niektórych testach, dzięki –