Darren Darren - 6 months ago 32
AngularJS Question

Karma not executing any unit tests

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:


  • Windows 7

  • Node v0.10.4

  • Chrome 26.0.14

  • Karma 0.8.5 (installed with 3 warnings -- 2 loss of precision and one 'no definition for inline function v8::Persistent v8::Persistent::New(v8::Handle)')



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;

Answer

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'
Comments