Testing service in Angular returns module is not defined
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.