2013-03-08 16 views
5

Patrzę na przykład TODO MVC AngularJS i widzę, że aplikacja jest zdefiniowana jako moduł.Testowanie modułu Sterownik modułu AngularJS

var todomvc = angular.module('todomvc', []); 

Wewnątrz kontrolerów, widzę je zdefiniować jako:

todomvc.controller('TodoCtrl', function TodoCtrl($scope, $location, todoStorage, filterFilter) { 
    //... 
}); 

Moje pytanie dotyczy testów jednostkowych ... Jak mogę napisać badanej jednostki dla tej klasy?

Próbowałem rzeczy jak:

describe('TodoCtrl', function() { 
    var controller; 

    beforeEach(function() { 
     controller = todomvc.TodoCtrl; 
    }); 

    afterEach(function() { 
     controller = null; 
    }); 

    describe('addTodo() method', function() { 
     console.log(controller) 
     it('should do something', function() { 
      expect(typeof controller.addTodo).toBe(true); //should fail 
     }); 

    }); 
}); 

... ale wtedy „kontroler” kończy się zerowa lub nieokreślone.

Czy muszę zmodyfikować aplikację TODO MVC, aby funkcja przekazana do todomvc.controller() nie była anonimowa?

Każdy kierunek zostałby doceniony, ponieważ jestem nowy w Angular.

Odpowiedz

10

Musisz użyć usługi $controller, aby przetestować kontroler.

Zasadniczo, można zrobić coś takiego:

var scope, ctrl; 

beforeEach(inject(function($rootScope, $controller) { 
    scope = $rootScope.$new(); 
    ctrl = $controller('TodoCtrl', {$scope: scope}); 
})); 

//use scope and ctrl as needed 

Patrz przykład tutaj: https://github.com/angular/angular-phonecat/blob/master/test/unit/controllersSpec.js#L18

+0

Sprawdzę, że obecnie, dzięki! – arthurakay

+0

Ten przykład bardzo pomaga ... ale nadal pojawia się błąd "TodoCtrl nie jest zdefiniowany", co powoduje, że myślę, że muszę zmienić sposób, w jaki jest zapisywany kontroler w przykładzie TODO MVC (co bardziej przypomina przykład, który podłączyłeś). Ale jestem na dobrej drodze, dzięki! – arthurakay

+0

Po dalszej inspekcji, muszę użyć "scope.addTodo()" zamiast "ctrl.addTodo()" po użyciu twojej sugestii. Dzięki! – arthurakay

Powiązane problemy