gin93r
gin93r

Reputation: 1593

Karma: Executed 0 of 0 Error

I think I have everything set up properly. I followed the specs of the Karma Tutorial for RequireJS, but everything I've tried seems to result in the same error.

It appears that my test-main.js file is being loaded since a console.log() will fire. However, in the Object.keys loop, the files will get listed, but TEST_REGEXP fails so the allTestFiles ends up being an empty array. I'm sure it's something silly, but it's created just like the Tutorial - with the exception of using node_modules for jquery, require, underscore.

My test-main.js file:

var allTestFiles    = [];
var TEST_REGEXP = /test\.js$/;

var pathToModule = function(path) {
    return path.replace(/^\/base\//, '').replace(/\.js$/, '');
};

Object.keys(window.__karma__.files).forEach(function(file)
{
    if(TEST_REGEXP.test(file))
    {
        // Normalize paths to RequireJS module names
        allTestFiles.push(pathToModule(file));
    }
});

if(console) console.log(allTestFiles);

require.config(
{
    // Karma serves files under /base, which is the basePath from the config file
    baseUrl: '/base/src',

    paths:
    {
        'jquery':'../node_modules/jquery/dist/jquery',
        'underscore':'../node_modules/underscore/underscore-min'
    },

    shim:
    {
        'underscore': { exports: '_' }
    },

    // dynamically load all test files
    deps: allTestFiles,

    // kick off jasmine, as it is asynchronous
    callback: window.__karma__.start
});

My karma.conf.js file:

 module.exports = function(config) {
      config.set({

        // base path that will be used to resolve all patterns (eg. files, exclude)
        basePath: '',


        // frameworks to use
        // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
        frameworks: ['jasmine', 'requirejs'],


        // list of files / patterns to load in the browser
        files: [
          'test/test-main.js',
          {pattern: 'node_modules/jquery/dist/jquery.js', included: false},
          {pattern: 'src/*.js', included: false},
          {pattern: 'test/**/*Spec.js', included: false}
        ],


        // list of files to exclude
        exclude: [
          'src/main.js'
        ],


        // preprocess matching files before serving them to the browser
        // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
        preprocessors: {
        },


        // test results reporter to use
        // possible values: 'dots', 'progress'
        // available reporters: https://npmjs.org/browse/keyword/karma-reporter
        reporters: ['progress'],


        // web server port
        port: 9876,


        // enable / disable colors in the output (reporters and logs)
        colors: true,


        // level of logging
        // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
        logLevel: config.LOG_INFO,


        // enable / disable watching file and executing tests whenever any file changes
        autoWatch: true,


        // start these browsers
        // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
        browsers: ['Chrome'],


        // Continuous Integration mode
        // if true, Karma captures browsers, runs the tests and exits
        singleRun: false
      });
    };

Upvotes: 0

Views: 885

Answers (1)

gin93r
gin93r

Reputation: 1593

I came across a solution to the problem.

I ended up changing my test-main.js file above the require.config section to this:

// Karma RequireJS configuration
var tests = [];
for (var file in window.__karma__.files) {
    if (/Spec\.js$/.test(file)) {
        tests.push(file);
    }
}

If I simply changed TEST_REGEXP to /Spec\.js$/ I ended up getting a timestamp error. I don't know why. More interesting is why following the guide produces errors. But it is all working now.

Upvotes: 1

Related Questions