I'm looking at the TODO MVC AngularJS example, and I see the application is defined as a module.
var todomvc = angular.module('todomvc', []);
Inside the controllers, I see them defined as:
todomvc.controller('TodoCtrl', function TodoCtrl($scope, $location, todoStorage, filterFilter) {
//...
});
My question deals with unit testing... how do I write a unit test for that class?
I've tried things like:
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
});
});
});
...but then "controller" ends up being null or undefined.
Do I need to modify the TODO MVC app so that the function passed to todomvc.controller() isn't anonymous?
Any direction would be appreciated as I'm very new to Angular.
I'm looking at the TODO MVC AngularJS example, and I see the application is defined as a module.
var todomvc = angular.module('todomvc', []);
Inside the controllers, I see them defined as:
todomvc.controller('TodoCtrl', function TodoCtrl($scope, $location, todoStorage, filterFilter) {
//...
});
My question deals with unit testing... how do I write a unit test for that class?
I've tried things like:
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
});
});
});
...but then "controller" ends up being null or undefined.
Do I need to modify the TODO MVC app so that the function passed to todomvc.controller() isn't anonymous?
Any direction would be appreciated as I'm very new to Angular.
Share Improve this question asked Mar 8, 2013 at 19:56 arthurakayarthurakay 5,6518 gold badges39 silver badges65 bronze badges1 Answer
Reset to default 10You need to used the $controller
service to unit test the controller.
Basically, you do something like this:
var scope, ctrl;
beforeEach(inject(function($rootScope, $controller) {
scope = $rootScope.$new();
ctrl = $controller('TodoCtrl', {$scope: scope});
}));
//use scope and ctrl as needed
See the example here: https://github./angular/angular-phonecat/blob/master/test/unit/controllersSpec.js#L18