I have an issue when running Jasmine tests through Karma and Gulp, I'm running tests through a gulp task with
return new karma.Server({
configFile: __dirname + '\\karma.conf.js',
singleRun: true
}, done).start();
Which fails on my angular dependency injection, I get a standard angular unknown provider myProvider
error. When I change the singleRun
property to false
, most of the unit tests pass (one set still fails though).
The tests have (and still) work fine in Chutzpah.
I've tried reducing my tests to the barebones:
var myProvider;
beforeEach(module('MyModule'));
beforeEach(inject(function (_my_) {
myProvider = _my_;
}));
it("exists", function () {
expect(myProvider).not.toBeUndefined();
});
and it still fails with the unknown provider myProvider
error. Again, they run fine if I set singleRun
to false
. I've tried running PhantomJS and Chrome, they both show the exact same behavior.
I'm using angular 1.4.7 and my dependencies in package.json look like
"dependencies": {
"gulp": "^3.9.0",
"gulp-chug": "^0.4.2",
"gulp-install": "^0.6.0",
"gulp-util": "^3.0.7",
"phantomjs": "^1.9.19",
"jasmine-core": "^2.4.1",
"karma": "^0.13.19",
"karma-jasmine": "^0.3.6",
"karma-phantomjs-launcher": "^0.2.3",
"karma-spec-reporter": "^0.0.23",
"karma-chrome-launcher": "^0.2.2"
}
karma.conf.js:
module.exports = function (config) {
config.set({
frameworks: ["jasmine"],
reporters: ["spec"],
browsers: ["PhantomJS"],
files: [
"./path/to/jquery/jquery-1.11.0.min.js",
"./path/to/angular/angular.js",
"./path/to/angular/angular-route.js",
"./path/to/angular/angular-mocks.js",
// I'm using this path order (app -> modules -> all)
// due to recommendations found on SO
"./path/to/application/app.js",
"./path/to/application/**/*Module.js",
"./path/to/application/**/*.js",
// For now, I'm just running the one test to simplify debugging
"./path/to/tests/myTest.Test.js"
]
});
};
Any ideas?
Turns out that our custom angular providers had internal dependencies that for some reason weren't being resolved with singleRun: true
.
I specifically set the load order for these files in karma.conf so that the dependencies load in the "correct" order and now I get the same result as when running with singleRun:false
(the same few tests as with singleRun:false
still fail, but that's another story).
The reason this worked with Chutzpah was that those references (which were listed in each individual test file) were in the correct order.