Search code examples
javascriptangularjsrequirejskarma-mocha

angularjs, karma and requirejs test case error


I am using requirejs for my angularjs application. For TDD i am using mocha. As per this article, I am writing my test cases but there is always this error that comes while executing a test case

Error: [$injector:modulerr] Failed to instantiate module sampleapp due to:
Error: [$injector:nomod] Module 'sampleapp' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument.

Test Case:

define([
    'angular',
    'angular-mocks'
], function() {
    describe('main controller todo app', function() {

        var scope, ctrl;

        beforeEach(module('sampleapp',[]));
        beforeEach(inject(function($rootScope, $controller) {
            scope = $rootScope.$new();
            ctrl = $controller('mainCtrl', {$scope: scope});
        }));

        it('is todo added', function() {
            scope.todo = 'My new Todo';
            scope.addTodo();
            assert.equal(scope.todos.length, 1);
        });
    })
});

Karma Conf:

module.exports = function(config) {
    'use strict';

    config.set({
        basePath: './',

        frameworks: [
            'requirejs',
            'mocha', 
            'chai'
        ],

        files: [{
            pattern: 'test/test-main.js',
            watched: true
        }, {
            pattern: 'app/angular/**/*.js', 
            included: false
        }, {
            pattern: 'app/*.js', 
            included: false
        }, {
            pattern: 'app/scripts/additional/**/*.js', 
            included: false
        }, {
            pattern: 'test/spec/**/*.js',
            included: false,
            watched: true
        }],

        exclude: [
            'app/main.js'
        ],

        reporters: ['spec'],

        port: 9876,

        colors: true,

        logLevel: config.LOG_INFO,

        autoWatch: true,

        browsers: ['Chrome'],

        captureTimeout: 20000,

        singleRun: false,

        plugins: [
            'karma-chai', 
            'karma-mocha',
            'karma-requirejs', 
            'karma-spec-reporter', 
            'karma-chrome-launcher'
        ]
    });
}

Test Main:

var tests = [];
var TEST_REGEXP = /test[A-Za-z0-9]{1,}-[A-Za-z0-9]{1,}\.js/i;

Object.keys(window.__karma__.files).forEach(function(file) {
    if (TEST_REGEXP.test(file)) {
        tests.push(file);
    }
});

requirejs.config({

    'baseUrl': '/base/app',

    'paths': {
        'angular': 'scripts/additional/angular/angular',
        'angular-mocks': 'scripts/additional/angular-mocks/angular-mocks',
    },

    'shim': {
       'angular-mocks' : {'exports' : 'angular-mocks', 'deps': ['angular']}
    },

    'deps': tests,

    'callback': window.__karma__.start
});

Any help or direction to fix this is greatly appreciated


Solution

  • the main problem was that the file where my module was getting created was not loaded (i.e. the file executing code var app = angular.module("sampleapp",[]);)

    Once that was corrected everything started to work