Search code examples
javascriptangularjskarma-runnerkarma-mocha

Testing $scope variables in angularjs


I have a piece of angular code like below:

$scope.someFunction = function(){
   $scope.val = $scope.value2.length;
}

I would like to test the above piece of code, for which i am doing something like below:

describe('test that', function() {
    beforeEach(module('waldo'));
    describe('MainController', function () {
        var $scope, createController;

        beforeEach(inject(function ($rootScope, $controller) {
            $scope = $rootScope.$new();

            createController = function (value2) {
                return $controller('MainController', {
                     $scope: $scope,
                     value2: value2
                });
            };
        }));

        it('exists', function () {
            var value2 = ["google", "yahoo"];
            var controller = createController(value2);
            expect(controller).not.toBeNull();
            $scope.val = 10;
            $scope.someFunction();
            assert.equal($scope.val, value2.length);      
        });
    });
});

I am getting an error like below:

TypeError: Cannot read property 'length' of undefined
        at Scope.MainController.$scope.someFunction (absolute/home/guru/app/controllers/MainController.js?131fd944e9e94b3a4ee4eb524e48e17a87dd4820:43:51)

Solution

  • createController = function (value2) {
        $scope.value2 =  value2;
        return $controller('MainController', {
             $scope: $scope
        });
    };