Reputation: 275
I seem to be having a problem getting my Jasmine unit tests to actually execute. I have verified that all my scripts are getting loaded by setting the logLevel to LOG_DEBUG. My unit test is identical to the services test @ https://github.com/angular/angular-seed/blob/master/test/unit/servicesSpec.js.
Also, I have used Testacular (before it was renamed to Karma) and I don't recall having this issue. I seem to get Chrome to run, but I have to manually hit a "Debug" button. Even when I hit this button my tests don't run.
System details:
Here's my module code (Scripts/main.js):
angular.module('sb.services', []).value('version', '0.0.1').value('amplify', amplify);
angular.module('sb.directives', []);
angular.module('sb.filters', []);
angular.module('sb.controllers', []).controller('SbController', [
'$scope',
'amplify',
function ($scope, amplify) {
$scope.message = 'Hello World! (amplify exists?=' + !!amplify + ')';
}
]);
angular.module('sb', [
'sb.services',
'sb.directives',
'sb.filters',
'sb.controllers'
]);
Here's my spec (Test/unit/servicesSpec.js):
'use strict';
describe('my services', function () {
beforeEach(module('sb.services'));
describe('version', function () {
it('should return current version', inject(function(version) {
expect(version).toEqual('0.0.1');
}));
});
});
Here's my karma.conf.js file:
// Karma configuration
// Generated on Mon Apr 15 2013 20:56:23 GMT-0400 (Eastern Daylight Time)
// base path, that will be used to resolve files and exclude
basePath = '';
// list of files / patterns to load in the browser
files = [
JASMINE,
JASMINE_ADAPTER,
'Vendor/angular-1.0.6/angular.js',
'Vendor/angular-1.0.6/angular-*.js',
'Vendor/json2/json2.js',
'Vendor/jquery/jquery-1.8.2.js',
'Vendor/amplify/amplify.js',
'Scripts/main.js',
'Test/unit/*.js'
];
// list of files to exclude
exclude = [
];
// test results reporter to use
// possible values: 'dots', 'progress', 'junit'
reporters = ['progress'];
// web server port
port = 9876;
// cli runner port
runnerPort = 9100;
// enable / disable colors in the output (reporters and logs)
colors = true;
// level of logging
// possible values: LOG_DISABLE || LOG_ERROR || LOG_WARN || LOG_INFO || LOG_DEBUG
logLevel = LOG_WARN;
// enable / disable watching file and executing tests whenever any file changes
autoWatch = false;
// Start these browsers, currently available:
// - Chrome
// - ChromeCanary
// - Firefox
// - Opera
// - Safari (only Mac)
// - PhantomJS
// - IE (only Windows)
browsers = ['Chrome'];
junitReporter = {
outputFile: 'Test/out/unit.xml',
suite: 'unit'
};
// 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;
Upvotes: 25
Views: 21934
Reputation: 4403
In my case singleRun
was set to false
Solution:
// Continuous Integration mode
// if true, Karma captures browsers, runs the tests and exits
singleRun: true
Upvotes: 3
Reputation: 111
I tried all above without success, until finally...
In my karma.conf.js
I removed the requirejs dependency, eg:
frameworks: ['jasmine', 'requirejs'],
to:
frameworks: ['jasmine'],
Upvotes: 9
Reputation: 5544
In case you are trying to solve this issue using JASMINE and JASMINE_ADAPTER this is no longer supported (at least on Karma version 0.10.2).
Instead use:
frameworks: ['jasmine']
in your Karma config file. You can read about this here.
I also found that in my files array I had set included: false
for a pattern. included
is only used if you want to manually include your Javascript files (for example if you will be using require.js). If all your tests will be loaded from that pattern you will see a message similar to:
PhantomJS 1.9.2 (Linux): Executed 0 of 0 ERROR (0.151 secs / 0 secs)
since the file containing the tests is never included. Removing the included: false
from the files array for my pattern fixed this since the default if included is not specified is true
.
Upvotes: 7
Reputation: 12993
I just had the same issue and I found that I had to set autoWatch = true
before Karma would run the tests automatically.
Upvotes: 15
Reputation: 9479
Alternatively you can use exclude section in your karma.conf.js
exclude = [
'Vendor/angular-1.0.6/angular-scenario.js'
];
Upvotes: 14
Reputation: 1205
My last answer was wrong (moving the JASMINE and JASMINE_ADAPTER lines below the angular.js lines). It fixed this particular problem, but created other issues. Instead, what I did to fix it was to specify only the angular-mocks file, instead of angular-*, like so:
JASMINE,
JASMINE_ADAPTER,
'Vendor/angular-1.0.6/angular.js',
'Vendor/angular-1.0.6/angular-mocks.js',
'Vendor/json2/json2.js',
'Vendor/jquery/jquery-1.8.2.js',
'Vendor/amplify/amplify.js',
'Scripts/main.js',
'Test/unit/*.js'
Upvotes: 12