Как проверить переменные локально на контроллере Angular в Жасмине

У меня есть контроллер с локальной переменной

function IndexCtrl($scope) {
  var pagesById = [];
  loadPages();

  // snip

  function loadPages() {
    // pagesById gets populated
  }

  // snip
}

Я бы хотел проверить, что pagesById правильно заполнен, но я не уверен, как получить от него это(). Мне не нужна эта переменная в области $scope, это просто промежуточный набор информации, поэтому, если я могу избежать добавления его в область $scope, которая была бы идеальной.

it('scope.pages should populated based on pages data.', function() {
    $httpBackend.flush();
    expect(pagesById).toEqualData(mock_page_results);
});

дает мне

ReferenceError: pagesById is not defined

Есть ли у меня какие-либо другие опции, кроме прикрепления его к $scope?

Ответы

Ответ 1

В вашей спецификации жасмина сначала создайте контроллер:

var ctrl;

beforeEach(inject(function($rootScope, $controller) {
  scope = $rootScope.$new();
  ctrl = $controller('myController', {
     $scope: scope
  });
}));

Затем вы можете получить доступ к своим свойствам, выполнив ctrl.pagesById. Конечно, вместо того, чтобы делать var pagesById, вам нужно использовать this.pagesById в вашем контроллере.

Ответ 2

Вот мой способ тестирования локальных переменных в методах Angular:

//------- Function for getting value of local variables

function getLocalVariable(sLocalVarName, obj, method, args){
    method = method.toString();
    let changedMethod = method.substring(0, method.lastIndexOf("}")) + ";" + "return " + sLocalVarName + "}";
    eval(' changedMethod = ' + changedMethod);

    return changedMethod.call(obj, args)
}

//----------- service

class assignStuffService {

    getAvaliableStuff(shift) {
        const params = {
            agency_id: 0 ,
            start_time: shift.data.shift.start_time,
            end_time : shift.data.shift.end_time
        };
    }
}

//----------- part of spec

it('should set values to "params" object props', () => {

            let shift = {
                data:{
                    shift:{
                        start_time:'',
                        end_time:''
                    }
                }
            };

            let params = getLocalVariable('params',
                                            assignStuffService,
                                            assignStuffService.getAvaliableStuff,
                                            shift);

            expect(params).toEqual({
                agency_id: 0 ,
                start_time: shift.data.shift.start_time,
                end_time : shift.data.shift.end_time
            });

        });