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
});
};
If you are mixing calls to module('someApp') and inject($someDependency) you will get this error.
All your calls to module('someApp') must occur before your calls to inject($someDependency).
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;
}));
});
To add on top of that answer from @axelduch, i had an issue where another file would not have the describe in, and that's what was causing my Injector already created, can not register a module!
If you run your tests with many files linked like this (this is using requirejs)
define(["require", "exports", "./test1.tests", "./test2.tests"], function (require, exports, Test1, Test2) {
describe("Test Module", function () {
Test1.tests();
Test2.tests();
});
});
Then ensure EACH tests that are run in this describe here contains their own describe method in them. So for example, the Test1 file would look like this
function tests() {
describe("Test directive", function () {
beforeEach(function () {
});
afterEach(function () {
});
});
}
Ensure all your linked tests file within the scope of your test has their own describe method, otherwise you may not know it but it's another test that makes your unit test fail.. and It can take you a long time to realize it.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With