Угловое модульное тестирование: как вызвать именованную функцию

У меня есть контроллер, который содержит именованную функцию.

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/

Другие вопросы по тегам