Angularjs 如何在angular指令中模拟元素

Angularjs 如何在angular指令中模拟元素,angularjs,unit-testing,angularjs-directive,Angularjs,Unit Testing,Angularjs Directive,我有一个非常简单的指示: angular.module('myModule',[]).directive('myInputAutofocus', function () { return { restrict: 'A', link: function (scope, element) { element.focus(); } }; }); 我如何测试这个?我找不到模拟元素的方法 EDIT:我做了一个小提琴来解释我的问题:您可

我有一个非常简单的指示:

angular.module('myModule',[]).directive('myInputAutofocus', function () {

  return {
    restrict: 'A',
    link: function (scope, element) {            
      element.focus();
    }
  };
});
我如何测试这个?我找不到模拟元素的方法


EDIT:我做了一个小提琴来解释我的问题:

您可以使用$compile来提供原始HTML来测试您的指令

您的测试设置如下所示:

var scope = $rootScope.$new(); 
var element = $compile('<div my-input-auto-focus=""></div>')(scope);
var-scope=$rootScope.$new();
变量元素=$compile(“”)(范围);

您还可以使用
angular.element(“您可以使用$compile提供原始HTML来测试指令

您的测试设置如下所示:

var scope = $rootScope.$new(); 
var element = $compile('<div my-input-auto-focus=""></div>')(scope);
var-scope=$rootScope.$new();
变量元素=$compile(“”)(范围);

您还可以使用
angular.element(“您可以了解如何:

spyOn(jQuery.fn,'foo');
编制(“”)(范围);
timeout.flush();
expect(jQuery.fn.foo).toHaveBeenCalled();

您可以了解如何:

spyOn(jQuery.fn,'foo');
编制(“”)(范围);
timeout.flush();
expect(jQuery.fn.foo).toHaveBeenCalled();

你用浏览器测试过你的指令吗?是的,它可以工作。但是我的问题与你想使用的jquery插件是一样的。我这么说是因为
element.focus()
应该是
element[0].focus()
.Focus方法存在于Jquery元素上:我的应用程序中有Jquery,因此它不是该元素的angular Jquery lite版本。您是否用浏览器测试过您的指令?是的,它可以工作。但我的问题与您想要使用的任何Jquery插件相同。我之所以这样说,是因为
Element.Focus()
应该是
元素[0]。focus()
。焦点方法存在于Jquery元素上:并且我的应用程序中有Jquery,因此它不是该元素的angular Jquery lite版本。当我这样做时:var element=angular.element(“”);var element2=$compile(element)(scope);然后element和element2完全不同,当我这样做时,我对element的模拟焦点方法不在element2上:var element=angular.element(“”);var element2=$compile(element)(scope);然后element和element2完全不同,我对element的模拟焦点方法不在element2上