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上