Единично тестване с Karma-Jasmine

Използвам angularJS и разбирам как да тествам моите $scope обекти с karma-jasmine, но имам затруднения при тестването на редовни функции и променливи в моя контролен файл

//controller.js
angular.module('myApp').controller('mainCtrl', function ($scope) {
    $scope.name = "bob";

    var aNumber = 34;

    function myFunction(string){
      return string;
    }
});

това, което бих искал да направя, е да тествам, за да видя дали очаквам (число).toBe (34);

// test.js
describe('Controller: mainCtrl', function () {

  // load the controller's module
  beforeEach(module('myApp'));

  var mainCtrl,
    scope;

  // Initialize the controller and a mock scope
  beforeEach(inject(function ($controller, $rootScope) {
    scope = $rootScope.$new();
    mainCtrl = $controller('mainCtrl', {
      $scope: scope
    });
  }));

  // understand this
  it('should expect scope.name to be bob', function(){
   expect(scope.name).toBe('bob');
  });

  // having difficulties testing this
  it('should expect aNumber to be 34', function(){
    expect(aNumber).toBe(34);
  });

  // having difficulties testing this    
  it('should to return a string', function(){
    var mystring = myFunction('this is a string');
    expect(mystring).toBe('this is a string');
  });


}); 

person user3509516    schedule 15.04.2014    source източник


Отговори (1)


Изглежда, че се опитвате да тествате частни променливи, декларирани в ъглов контролер. Променливите, които не са изложени през $scope, не могат да бъдат тествани, тъй като са скрити и се виждат само в обхват на функция вътре в контролера. Повече за личните членове и скриването на информация в javascript можете да намерите тук

Начинът, по който трябва да подходите към частните полета в тестовете, е като ги тествате чрез открит API. Ако променливата не се използва в нито един изложен публично метод, това означава, че не се използва, така че няма смисъл да я запазвате и тествате.

person rscheibinger    schedule 15.04.2014
comment
Вижте статията на Philip Walton относно тестването частни функции. IMHO това е много обмислен подход, който предпочитам да използвам, докато тествам AngularJS код. - person Egel; 29.09.2014