Модульное тестирование с 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;
    }
});

то, что я хотел бы сделать, это проверить, ожидает ли (aNumber) .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)


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

Подходя к закрытым полям в тестах, нужно тестировать их с помощью открытого API. Если переменная не используется ни в одном открытом публичном методе, это означает, что она не используется, поэтому нет смысла сохранять ее и тестировать.

person rscheibinger    schedule 15.04.2014
comment
Посмотрите статью Филипа Уолтона о тестировании. частные функции. ИМХО, это очень продуманный подход, который я предпочитаю использовать при тестировании кода AngularJS. - person Egel; 29.09.2014