Угловое модульное тестирование: как вызвать именованную функцию
У меня есть контроллер, который содержит именованную функцию.
function controller($scope, ...){
function foo(data){
//logic for other stuff
$log(data);
}
//some promise stuff
waiting.then(function(data){
foo(data);
});
Для способа, которым доступны функции, я не хотел назначать foo переменной области видимости, так как делал что-то вроде этого:
$scope.foo = function(data) {}
был осужден? (не уверен... но так как я не вызываю Фу из поля зрения, я не понимаю, почему я бы это сделал)
Моя проблема в том, как мне вызвать функцию foo из блока "it" модульного теста?
т.е.
it('expect calling function', function(){
foo(data);
});
Это дает мне ошибку
1 ответ
Вызов foo
Функция вне контроллера невозможна, потому что foo
is замыкание - внутренняя функция определена и доступна только в теле функции контроллера. См. https://developer.mozilla.org/cs/docs/Web/JavaScript/Closures
Я предпочитаю контроллер как синтаксис для углового контроллера. Контроллер - это обычный объектный конструктор, для которого определены свойства и метод. Привязка к объему возникает только во время оценки директивы ng-controller (или отображения маршрута).
Как правило, тогда вы можете создать экземпляр контроллера в тесте, макет зависимостей (waiting
) и использовать шпионов для вызова функции assert.
http://toddmotto.com/digging-into-angulars-controller-as-syntax/