Take the 2-minute tour ×
Stack Overflow is a question and answer site for professional and enthusiast programmers. It's 100% free, no registration required.

Error received when running karma start configs/karma.conf.js:

INFO [PhantomJS 1.9.2 (Linux)]: Connected on socket PK-IbFeI1qpFq0fix6WI
PhantomJS 1.9.2 (Linux) IndexController should add name parameter to scope FAILED
Error: [$injector:modulerr] http://errors.angularjs.org/1.2.6/$injector/modulerr?p0=myapp.controllers&p1=Error%3A%20%5B%24injector%3Anomod%5D%20http%3A%2F%2Ferrors.angularjs.org%2F1.2.6%2F%24injector%2Fnomod%3Fp0%3Dmyapp.controllers%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9877%2Fbase%2Fpublic%2Fapp%2Flib%2Fangular%2Fangular.min.js%3F1387689655000%3A20%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9877%2Fbase%2Fpublic%2Fapp%2Flib%2Fangular%2Fangular.min.js%3F1387689655000%3A21%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9877%2Fbase%2Fpublic%2Fapp%2Flib%2Fangular%2Fangular.min.js%3F1387689655000%3A29
    at /home/Projects/abbrevi8-karma-tests/public/app/lib/angular/angular.min.js:29
TypeError: 'undefined' is not an object (evaluating 'scope.name')
    at /home/Projects/abbrevi8-karma-tests/test/unit/controllerSpec.js:19
PhantomJS 1.9.2 (Linux): Executed 1 of 1 (1 FAILED) ERROR (0.178 secs / 0.006 secs)

public/app/controllers.js

var myApp = angular.module('myApp', []);

myApp.controller('IndexController', function ($scope) {
        $scope.name = 'bob';
});

test/unit/controllerSpec.js

'use strict';

describe('IndexController', function() {
    //initialise module
    beforeEach(module('myapp.controllers'));

    //params initialised in scope for tests
    var ctrl, scope;

    beforeEach(inject(function($controller) {
        //get controller from $controller provider
        scope = {}; 
        ctrl = $controller('IndexController', {
            $scope: scope
        }); 
    }));

    it ('should add name parameter to scope', function() {
        expect(scope.name).toBeDefined(); 
    }); 
});

Full project (same as above, only with my karma.conf.js and setup.sh): https://gist.github.com/AlecTaylor/8078807

share|improve this question
add comment

2 Answers

up vote 2 down vote accepted

Try:

beforeEach(module('myApp'));

instead of:

beforeEach(module('myapp.controllers'));
share|improve this answer
    
Thanks for that. Annoyed with the blog post that told me to write the other >.< –  A T Dec 22 '13 at 7:08
    
Ha! I didn't notice that. –  blesh Dec 22 '13 at 16:36
add comment

I'm just guessing here, as I don't have Phantom to run on Linux... but $scope is expected to be a Scope object.

Try injecting $rootScope, and either use that, or create a $new() child scope from it:

beforeEach(inject(function($controller, $rootScope) {
    //get controller from $controller provider
    scope = $rootScope.$new(); 
    ctrl = $controller('IndexController', {
        $scope: scope
    }); 
}));
share|improve this answer
    
Thanks, but that still hasn't fixed the problem. scope and ctrl are still resolved as undefined :\ –  A T Dec 22 '13 at 6:48
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.