Tony Ennis Tony Ennis - 1 month ago 25
AngularJS Question

Can't get my head around "Injector already created, can not register a module!" error

My application seems to run fine. I started writing test cases and got the dreaded Injector already created, can not register a module! error.

Here's my test code. These are the only lines in the file.

'use strict';

var fac,
osf,
obff;

beforeEach(module("myApp"));

beforeEach(inject(function (OrderSashingFactory) {
fac = OrderSashingFactory;
}));


I really don't know where to go from here - I am going in circles.

EDIT - here's my
karma.conf.js
file. I have other tests that run fine.

// Karma configuration
// Generated on Mon Aug 25 2014 21:08:59 GMT-0400 (Eastern Daylight Time)

module.exports = function (config) {
config.set({

// base path, that will be used to resolve files and exclude
basePath: '',


// frameworks to use
frameworks: ['mocha', 'chai', 'sinon'],


// list of files / patterns to load in the browser
files: [
'app/bower_components/angular/angular.js',
'app/bower_components/angular-route/angular-route.js',
'app/bower_components/angular-mocks/angular-mocks.js',
'app/js/*.js',
'app/test/js/*.js',
'app/partials/**/*.html'
],

preprocessors: {
'app/partials/**/*.html' : 'html2js'
},

ngHtml2JsPreprocessor: {
// strip app from the file path
stripPrefix: 'app/'
},

// list of files to exclude
exclude: [

],

// plugins: [
// 'karma-mocha',
// 'karma-chrome-launcher'
// ],


// test results reporter to use
// possible values: 'dots', 'progress', 'junit', 'growl', 'coverage'
reporters: ['progress'],


// web server port
port: 9876,


// enable / disable colors in the output (reporters and logs)
colors: true,


// level of logging
// possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
logLevel: config.LOG_INFO,


// enable / disable watching file and executing tests whenever any file changes
autoWatch: true,


// Start these browsers, currently available:
// - Chrome
// - ChromeCanary
// - Firefox
// - Opera (has to be installed with `npm install karma-opera-launcher`)
// - Safari (only Mac; has to be installed with `npm install karma-safari-launcher`)
// - PhantomJS
// - IE (only Windows; has to be installed with `npm install karma-ie-launcher`)
browsers: ['Chrome'],


// If browser does not capture in given timeout [ms], kill it
captureTimeout: 60000,


// Continuous Integration mode
// if true, it capture browsers, run tests and exit
singleRun: false
});
};

Answer

You haven't wrapped your test in a describe, it would look something like this:

describe('MyTestName', function () { 
    'use strict';

    var fac,
        osf,
        obff;

    beforeEach(module("myApp"));

    beforeEach(inject(function (OrderSashingFactory) {
        fac = OrderSashingFactory;
    }));
});
Comments