I have a problem with my karma configuration when running my tests in a phantomJS environment. The test result output is like this:
Running "karma:build" (karma) task INFO [karma]: Karma v0.12.16 server started at http:// localhost:9876/ INFO [launcher]: Starting browser PhantomJS INFO [PhantomJS 1.9.7 (Mac OS X)]: Connected on socket 1PbFcS7IUZXvE6I7cMyv with id 60460739 ......... PhantomJS 1.9.7 (Mac OS X): Executed 9 of 0 SUCCESS (0.881 secs / 0.022 secs)
Notice the result: 9 out of 0 tests were successfully executed. What!?
If I change the browser to chrome it looks like this:
Running "karma:build" (karma) task INFO [karma]: Karma v0.12.16 server started at http:// localhost:9876/ INFO [launcher]: Starting browser Chrome INFO [Chrome 35.0.1916 (Mac OS X 10.9.3)]: Connected on socket 5L19NgN3Bi5lD_XwmVZr with id 93959653 ................................................................................ ................................................................................ .............................................................. Chrome 35.0.1916 (Mac OS X 10.9.3): Executed 222 of 222 SUCCESS (0.375 secs / 0.352 secs)
Now, all of my 222 tests are found and executed.
The problem is not only happening on my Macbook but on a linux server too. The number of tests when run with phantomjs is changing from time to time. Sometimes its 9 of 0, sometimes 120 of 0. I don't see a pattern here.
I'm a little lost right now. I already updated most of the dependencies:
- node.js 0.10.29
- Karma 0.12.16 (all karma plugins use the current version)
- grunt-karma 0.8.3
- grunt 0.4.2
- phantomJS 1.9.7
The jasmine unit tests and the application that is being tested are written as AMD modules, so karma is running with karma-requirejs and karma-jasmine.
Here is my karma.conf.js:
module.exports = function (config) {
config.set({
basePath: '',
frameworks: ['jasmine', 'requirejs'],
files: [
{pattern: 'test/external-libs/angular-mocks.js', included: false},
{pattern: 'app/**/*', included: false},
{pattern: 'test/unit/**/*.js', included: false},
'test/main-test.js'
],
exclude: [
],
reporters: ['dots'],
port: 9876,
colors: false,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ["PhantomJS"],
captureTimeout: 60000,
singleRun: false
});
};
Here is the main-test.js from where karma tests are started after loading all requireJS dependencies:
(function (window, require) {
"use strict";
var file, requireModules;
requireModules = [];
for (file in window.__karma__.files) {
if (window.__karma__.files.hasOwnProperty(file)) {
if (file.substring(file.length - 7, file.length) === 'Test.js') {
requireModules.push(file);
}
}
}
requireModules.push("jquery");
requireModules.push("moment");
requireModules.push("app");
requireModules.push("mocks");
require({
baseUrl:'/base/app/modules',
paths:{
'angular':'/base/app/external-libs/angular',
'jquery':'/base/app/external-libs/jquery',
'jquery.mobile':'/base/app/external-libs/jquery.mobile.js',
'adapter':'/base/app/external-libs/jquery-mobile-angular-adapter.js',
'moment': '/base/app/external-libs/moment.min',
'add2Home': '/base/app/external-libs/add2home',
'mocks':'/base/test/external-libs/angular-mocks',
'signaturePad': '/base/app/external-libs/signature_pad'
},
shim:{
'angular':{ deps:['jquery'], exports:'angular' },
'mocks':{ deps:['angular'], exports:'mocks' }
}
}, requireModules, function () {
window.__karma__.start();
}, function (err) {
var failedModules = err.requireModules;
console.log("err", err);
if (failedModules && failedModules[0]) {
throw new Error("Modul konnte nicht geladen werden: " + failedModules);
} else {
throw new Error("Unbekannter Fehler:" + err);
}
});
}(window, require));
Here is the output when karma is running with debug logging enabled:
Running "karma:build" (karma) task
DEBUG [config]: autoWatch set to false, because of singleRun
DEBUG [plugin]: Loading karma-* from /Users/mzrinck/projects/hwa-mobile/node_modules
DEBUG [plugin]: Loading plugin /Users/mzrinck/projects/hwa-mobile/node_modules/karma-chrome-launcher.
DEBUG [plugin]: Loading plugin /Users/mzrinck/projects/hwa-mobile/node_modules/karma-coverage.
DEBUG [plugin]: Loading plugin /Users/mzrinck/projects/hwa-mobile/node_modules/karma-jasmine.
DEBUG [plugin]: Loading plugin /Users/mzrinck/projects/hwa-mobile/node_modules/karma-junit-reporter.
DEBUG [plugin]: Loading plugin /Users/mzrinck/projects/hwa-mobile/node_modules/karma-phantomjs-launcher.
DEBUG [plugin]: Loading plugin /Users/mzrinck/projects/hwa-mobile/node_modules/karma-requirejs.
INFO [karma]: Karma v0.12.16 server started at http://localhost:9876/
INFO [launcher]: Starting browser PhantomJS
DEBUG [temp-dir]: Creating temp dir at /var/folders/cc/76k3g2s94x9556104ps2cxn40000gn/T/karma-64663676
DEBUG [launcher]: /Users/mzrinck/projects/hwa-mobile/node_modules/karma-phantomjs-launcher/node_modules/phantomjs/lib/phantom/bin/phantomjs /var/folders/cc/76k3g2s94x9556104ps2cxn40000gn/T/karma-64663676/capture.js
DEBUG [watcher]: Ignored directory "/Users/mzrinck/projects/hwa-mobile/app/css"
[….]
DEBUG [watcher]: Resolved files:
/Users/mzrinck/projects/hwa-mobile/node_modules/requirejs/require.js
/Users/mzrinck/projects/hwa-mobile/node_modules/karma-requirejs/lib/adapter.js
[..]
/Users/mzrinck/projects/hwa-mobile/test/main-test.js
DEBUG [web-server]: serving: /Users/mzrinck/projects/hwa-mobile/node_modules/karma/static/client.html
DEBUG [web-server]: serving: /Users/mzrinck/projects/hwa-mobile/node_modules/karma/static/karma.js
DEBUG [web-server]: upgrade /socket.io/1/websocket/ytiWxyQedIcvJajRphM8
DEBUG [karma]: A browser has connected on socket ytiWxyQedIcvJajRphM8
INFO [PhantomJS 1.9.7 (Mac OS X)]: Connected on socket ytiWxyQedIcvJajRphM8 with id 64663676
DEBUG [launcher]: PhantomJS (id 64663676) captured in 1.26 secs
DEBUG [web-server]: serving: /Users/mzrinck/projects/hwa-mobile/node_modules/karma/static/context.html
DEBUG [web-server]: serving (cached): /Users/mzrinck/projects/hwa-mobile/node_modules/requirejs/require.js
[…]
DEBUG [PhantomJS 1.9.7 (Mac OS X)]: Disconnected during run, waiting 2000ms for reconnecting.
DEBUG [web-server]: upgrade /socket.io/1/websocket/VJFvQl7_d-d3_cm7phM9
DEBUG [karma]: A browser has connected on socket VJFvQl7_d-d3_cm7phM9
DEBUG [PhantomJS 1.9.7 (Mac OS X)]: Reconnected on VJFvQl7_d-d3_cm7phM9.
..........
PhantomJS 1.9.7 (Mac OS X): Executed 10 of 0 SUCCESS (0.889 secs / 0.022 secs)
DEBUG [karma]: Run complete, exitting.
DEBUG [launcher]: Disconnecting all browsers
DEBUG [launcher]: Process PhantomJS exited with code 0
DEBUG [temp-dir]: Cleaning temp dir /var/folders/cc/76k3g2s94x9556104ps2cxn40000gn/T/karma-64663676