Testing service in Angular returns module is not defined Testing service in Angular returns module is not defined angularjs angularjs

Testing service in Angular returns module is not defined


You are missing the angular-mocks.js file.


I had the same problem, and I understood why it wasn't working:The jasmine.js javascript must be referenced BEFORE the angular-mocks.js file.Indeed, the angular-mocks.js checks if Jasmine is loaded, and only if it is it will add the module function to the window.

Here is an extract of Angular Mocks code:

(Edit after the few comments about 'hacking' I had below: this is just an extract of the code, this is not something you need to write yourself, it's already there!)

window.jasmine && (function(window) {[...]  window.module = angular.mock.module = function() {    var moduleFns = Array.prototype.slice.call(arguments, 0);    return isSpecRunning() ? workFn() : workFn;    /////////////////////    [...]  };

In a nutshell:Just reference your jasmine.js before angular-mocks.js and off you go.


The window.module function comes in angular-mocks.js and is a shorthand for angular.mock.module. As mentioned in the docs, the module function only works with Jasmine.

Using Testacular, the following example configuration file will load angular-mocks.js.

/** example testacular.conf.js */basePath = '../';files = [  JASMINE,  JASMINE_ADAPTER,  'path/to/angular.js',  'path/to/angular-mocks.js',   // for angular.mock.module and inject.  'src/js/**/*.js',             // application sources  'test/unit/**/*.spec.js'      // specs];autoWatch = true;browsers = ['Chrome'];

And, as suggested elsewhere, you can run Testacular with debug logging to see what scripts are loaded (you can also see the same in the inspector):

testacular --log-level debug start config/testacular.conf.js

The angular.mock.inject docs include a pretty complete example.