2012-12-03 58 views
1

这里是指令,它包装(从这里https://github.com/vojtajina/ng-directive-testing以下说明)的jQuery UI的自动完成角指令测试引发错误

angular.module('myApp.directives', []) 
    .directive('autocomplete', function() { 
     return { 
      restrict: 'E', 
      replace: true, 
      transclude: true, 
      template: '<input ng-model="autocomplete" type="text"/>', 
      link: function (scope, element, attrs) { 
       scope.$watch(attrs.typedvalue, function() { 
        element.autocomplete({ 
         search: function (event) { 
          scope[attrs.typedvalue] = this.value; 
          scope[attrs.fullselection] = ''; 
          scope[attrs.selectionid] = ''; 
          scope[attrs.shortselection] = ''; 
          scope.$apply(); 
         }, 
         source: scope.fetchList, 
         select: function (event, ui) { 
          scope[attrs.fullselection] = ui.item.label; 
          scope[attrs.selectionid] = ui.item.itemId; 
          scope[attrs.shortselection] = ui.item.value; 
          scope.$apply(); 
         } 
        }); 
       }); 
      } 
     }; 
    }); 

我想用下面的测试单元测试:

describe('Directives', function() { 

    beforeEach(module('myApp.directives')); 

    describe('autocomplete directive', function() { 
     var elm, scope; 
     beforeEach(inject(function ($rootScope, $compile) { 
      elm = angular.element('<autocomplete fullselection="fullDstn" shortselection="dstn" selectionid="geonameId" typedvalue="typedValue" id="DstnSlctr"/>'); 
      scope = $rootScope; 
      $compile(elm)(scope); 
      scope.$digest(); 
     })); 

     it('should create input', inject(function ($compile, $rootScope) { 
      expect(elm.id).toBe('DstnSlctr'); 
      expect(elm.prop('tagName')).toBe('INPUT'); 
      debugger; 
     })); 
    }); 
}); 

但我得到一个错误:

 TypeError: Object [[object HTMLInputElement]] has no method 'autocomplete' 
      at Object.fn (C:/Users/kmukhort/Documents/_files/TMate/AngularTest/a 
pp/js/directives.js:13:33) 

上线element.autocomplete (我怀疑jquery-ui功能在$编译时没有附加到元素上。 我指的testacular.config

basePath = '../'; 

files = [ 
... 
    'app/lib/jquery-ui-*.js', 
]; 

你能不能,请告诉jQuery的UI库,我在做什么错?

谢谢! 塞梅

回答

1

我认为你需要更换:

element.autocomplete(...); 

有了:

$(element).autocomplete(...); 
+0

我想这对我来说,它不工作。 –