我正在测试一个指令,我使用库Mobiscroll
。我知道Mobiscroll也有一个角度组件,但我现在使用旧版本的Mobiscroll库,所以我对此不感兴趣。
问题是,我想测试是否调用了元素上的方法,在本例中是mobiscroll方法。我有以下代码:我的指令的链接方法:
link: function (scope, element, attr) {
var datepicker = element.find("input");
scope.showDate = function () {
datepicker.mobiscroll('show');
};
}
如果调用了datepicker.mobiscroll('show')
,我想查看我的Jasmine测试。但是我不能在我的测试中为元素设置间谍,因为查找元素不会导致指令中链接方法中使用的完全相同的对象。例如,以下内容不起作用:
targetElement = $compile(elementBluePrint)($scope);
rootScope.$apply();
var target = targetElement.find("input");
spyOn(target, "mobiscroll").and.callThrough();
因为这不起作用,我如何在Angular Jasmine测试中监视mobiscroll方法?
答案 0 :(得分:2)
jQuery(以及最终的jqLite)元素的常见问题是每个元素都是一个包装DOM元素的新对象,
angular.element(element[0]) !== angular.element(element[0])
当修改其中一个(在这种情况下,属性被模拟函数替换)时,它不会影响另一个。对于要受影响的所有元素,应该模拟他们的原型:
spyOn(angular.element.prototype, "mobiscroll").and.callThrough();