Angular JS + Jasmine Testing Controller

I have a simple test in controllers.Spec.coffee Angular Application Code:

describe 'Controllers', -> beforeEach -> angular.module 'app' describe 'MainCtrl', -> beforeEach inject ($controller, $rootScope) -> scope = $rootScope.$new() ctrl = $controller 'MainCtrl', $scope: scope it 'should be true', -> expect(true).toEqual(true) 

And the SpecRunner.html file for testing:

 <html lang="eu"> <head> <title>Angular Test Runner</title> <script src="../js/libs/jquery.js"></script> <script src="lib/jasmine.js"></script> <script src="lib/jasmine-html.js"></script> <script src="../js/libs/underscore.js"></script> <script src="../js/libs/angular.js"></script> <script src="lib/angular/angular-mocks.js"></script> <script src="lib/angular/angular-scenario.js" ng-autotest></script> <script src="../js/controllers.js"></script> <script src="controllersSpec.js"></script> <script type="text/javascript"> (function() { var jasmineEnv = jasmine.getEnv(); jasmineEnv.updateInterval = 1000; var htmlReporter = new jasmine.HtmlReporter(); jasmineEnv.addReporter(htmlReporter); jasmineEnv.specFilter = function(spec) { return htmlReporter.specFilter(spec); }; var currentWindowOnload = window.onload; window.onload = function() { if (currentWindowOnload) { currentWindowOnload(); } execJasmine(); }; function execJasmine() { jasmineEnv.execute(); } })(); </script> </head> <body> </body> </html> 

This is a bug about "$ modules" in angular-mock:

 TypeError: Cannot read property '$modules' of null at Object.workFn (http://localhost/lolobot/test/lib/angular/angular-mocks.js:1745:25) at Object.<anonymous> (http://localhost/lolobot/test/lib/angular/angular-scenario.js:24673:54) at Array.forEach (native) at Object.forEach (http://localhost/lolobot/test/lib/angular/angular-scenario.js:9538:11) 

Can you help me with this problem? This is my first Angular test application.

+4
source share
1 answer

I think you need some more Angular packages. I am including the entire kit in my runner. I do not think that in fact everyone needs them, but I tried to remove several and had failures. In particular, I have just such:

 angular.js angular-bootstrap.js angular-cookies.js angular-loader.js angular-mocks.js angular-resource.js angular-sanitize.js 

Also, in your tests, you probably want to have

 controller = null scope = null 

before anything else in your describe block. Otherwise, your controller and scope fall into local variables in your inject function.

0
source

All Articles