user944513
user944513

Reputation: 12729

why the message property is undefined?

I make one controller in Angularjs and try to test that controller using Jasmine. I got this error Cannot read property 'message' of undefined why ?

Here is my code.

controller

(function(){
  'use strict';
  angular.module('app.home').controller('homeCntrl',homeCntrl);

  function homeCntrl(){
    var home=this;
    home.clickbtn=function(){

      home.message='test';
      alert(home.message)
    }
  }
})();

Testing

(function(){
  'use strict';
  describe('http controller test', function() {

  var $rootScope,
    $scope,
    controller,
    $q,
    $httpBackend;

  beforeEach(function() {
    module('app');

    inject(function($injector) {
      $rootScope = $injector.get('$rootScope');
      $scope = $rootScope.$new();
      controller = $injector.get('$controller')('homeCntrl', {
        $scope: $scope
      })


    })
  })




  describe('Init value', function() {
    it('check name value', function() {
    expect(controller.message).toBeUndefined();  
    })

  })

  it('it should be true', function() {
    expect(true).toBeTruthy();

  })
})

})();

any update ?durning testing I got this error .. ? can we do testing of this controller ?Every thing is fine on angular js code problem is on test code..only check appspec.js

Upvotes: 1

Views: 106

Answers (1)

Whisher
Whisher

Reputation: 32716

Just an hint

app

(function() {
'use strict';

function HomeController() {
  var home = this;
  home.title = 'Home';
}

angular.module('home.controllers', [])
    .controller('HomeController', HomeController);
})();

test

'use strict';

describe('home controller', function() {

  var $controller;
  var scope;

  beforeEach(module('home.controllers'));
  beforeEach(inject(function(_$controller_, $rootScope) {
    $controller = _$controller_;
    scope = $rootScope.$new();
    $controller('HomeController as home', {$scope: scope});
  }));

  it('should have text = "Home"', function() {
    expect(scope.home.title).toEqual('Home');
  });

});

in your case the test should be like

scope.home.clickbtn();
expect(scope.home.message).toEqual('test');

Take a look at http://www.bradoncode.com/tutorials/angularjs-unit-testing/ to master unit test in angular

Upvotes: 1

Related Questions