2014-01-28 5 views
6

Учитывая следующую директивуТестирование фокусировки() на элементе в AngularJS директивы шаблона

directive('myDirective', function() { 
    return { 
     restrict: 'A', 
     scope: {}, 
     replace: false, 
     template: '<input ng-focus="onFocus()" type="text" />', 
     link: function(scope, element, attr) { 
      scope.onFocus = function() { 
       console.log('got focus'); 
      }; 
     } 
    }; 
}); 

Я проверил, что фокус наблюдающий работает в браузере, но я хотел бы, чтобы иметь возможность вызвать его в единичном тесте. Это то, что я пробовал, но он не работает.

var element = angular.element('<div my-directive></div>'); 
$compile(element)($scope); 
$scope.$digest(); 
element.find('input')[0].focus(); 

Я могу видеть, что я правильно добраться до ввода с вызовом найти, и я ожидаю, что код, чтобы вызвать событие фокуса на поле ввода, но ничего не происходит. Что мне здесь не хватает?

+0

Я не думаю, что вам нужно сделать 'element.find ('input') 'элемент _is_ входной тег – dcodesmith

+0

Заменить установлено значение false. 'element' - это div, и внутри него находится тег ввода. – grivescorbett

+0

О, я пропустил эту часть – dcodesmith

ответ

17

При попытке запуска событий на угловых элементах следует использовать функцию triggerHandler(), которая является действительно функцией jqLite, а не угловыми, а затем передает событие в виде строкового параметра, как показано ниже.

element.find('input').triggerHandler('focus'); 

Для выполнения любых других функций на угловом элементе, прочитайте документацию here, она показывает список функций, доступных для угловых элементов