Javascript-форум (https://javascript.ru/forum/)
-   Angular.js (https://javascript.ru/forum/angular/)
-   -   Помогите с юнит тестом директивы (https://javascript.ru/forum/angular/59151-pomogite-s-yunit-testom-direktivy.html)

StCom 29.10.2015 22:41

Помогите с юнит тестом директивы
 
Есть след директива:
angular.module( 'myDirectives', [] )

.directive('inline', ['$http', function ($http) {
  return {
    template: '<span ng-switch on="edit" >' +
              '<span ng-switch-default>{{value}}  <small><span class="glyphicon glyphicon-pencil"></span></small></span>' +
              '<input ng-switch-when="true" type="text" ng-model="$parent.value"/>' +
              '</span>',
    restrict: 'A',
    scope: {
      inline: '='
    },
    link: function (scope, element, attribs) {
      scope.value = scope.inline;

      /* watch for changes from the controller */
      scope.$watch('inline', function (val) {
        scope.value = val;
      });
console.log(element);
      /* enable inline editing functionality */
      var enablingEditing = function () {
        scope.edit = true;

        setTimeout(function () {
          element.children().children('input')[0].focus();
          element.children().children('input').bind('blur', function (e) {
            scope.$apply(function () {
              disablingEditing();
            });
          });
        }, 100);
      };


      /* disable inline editing functionality */
      var disablingEditing = function () {
        scope.edit = false;
        scope.inline = scope.value;
        console.log(scope.inline);
        if (scope.inline){
            $http.put("api.php", scope.inline).success(function (data, status, headers, config) {  })
        }
      };


      /* set up the default */
      disablingEditing();


      /* when the element with the inline attribute is clicked, enable editing */
      element.bind('click', function (e) {

        if ((e.target.nodeName.toLowerCase() === 'span') || (e.target.nodeName.toLowerCase() === 'img')) {
          scope.$apply(function () { // bind to scope
            enablingEditing();
          });
        }
      });

      /* allow editing to be disabled by pressing the enter key */
      element.bind('keypress', function (e) {

        if (e.target.nodeName.toLowerCase() != 'input') return;

        var keyCode = (window.event) ? e.keyCode : e.which;

        if (keyCode === 13) {
          scope.$apply(function () { 
            disablingEditing();
          });
        }
      });
    }
  }
}]);


Суть ее в создании инлайн редактируемой строки <span inline="value"></span> и отправки PUT-запроса при ее изменении

Никак не выходит написать юнит тест для нее, помогите пож покрыть код


Часовой пояс GMT +3, время: 18:35.