2013-03-08 1 views
5

Я смотрю пример TODO MVC AngularJS, и я вижу, что приложение определяется как модуль.Модуль Тестирование Модульный контроллер AngularJS

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

Внутри контроллеров, я вижу их определяется как:

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

Мой вопрос касается модульного тестирования ... как я могу написать модульный тест для этого класса?

Я пытался что-то вроде:

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 
     }); 

    }); 
}); 

... но затем «контроллер» заканчивает тем, что нуль или не определено.

Нужно ли мне изменить приложение TODO MVC, чтобы функция передавалась todomvc.controller() не является анонимной?

Любое направление будет оценено по мере того, как я очень новичок в Angular.

ответ

10

Вам необходимо использовать сервис $controller для проверки устройства.

В принципе, вы делаете что-то вроде этого:

var scope, ctrl; 

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

//use scope and ctrl as needed 

Смотрите пример здесь: https://github.com/angular/angular-phonecat/blob/master/test/unit/controllersSpec.js#L18

+0

Я проверить это, спасибо! – arthurakay

+0

Этот пример очень помогает ... но я все равно получаю ошибку «TodoCtrl is not defined», что заставляет меня думать, что мне нужно изменить способ написания контроллера в примере TODO MVC (что больше напоминает пример, который вы связали). Но я на правильном пути, спасибо! – arthurakay

+0

После дополнительной проверки, я должен использовать «scope.addTodo()» вместо «ctrl.addTodo()» после использования вашего предложения. Благодаря! – arthurakay