Как проверить переменные локально на контроллере 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
});
});