Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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;
like image 469
Darren Avatar asked Apr 16 '13 04:04

Darren


People also ask

Is Karma used for unit testing?

For any AngularJS development company it is a must to work with unit testing on any project, regardless of whether you choose to use a TDD (test-driven development) approach or not, using it will have a lot of advantages.

Is jest faster than karma?

Comparing test execution time, I found that Jest runs unit tests at 2x to 3x the speed of Karma. This can be drastic as your project becomes larger and the amount of test cases skyrocket.

Which is better jest or karma?

Karma is a JavaScript test runner. It helps run the testing of the frontend in a real browser, running the test against the production build in a real browser and can help find discrepancies across different browsers. Jest is a must consideration for React users.


3 Answers

I just had the same issue and I found that I had to set autoWatch = true before Karma would run the tests automatically.

like image 143
Sly_cardinal Avatar answered Oct 21 '22 12:10

Sly_cardinal


Alternatively you can use exclude section in your karma.conf.js

exclude = [
  'Vendor/angular-1.0.6/angular-scenario.js'
];
like image 45
Darren Avatar answered Oct 21 '22 12:10

Darren


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'
like image 30
Ryan Quinn Avatar answered Oct 21 '22 12:10

Ryan Quinn