2016-01-06 67 views
0

我正在测试一个指令,其中我使用库Mobiscroll。我知道Mobiscroll也有一个角度组件,但我现在使用旧版本的Mobiscroll库,所以我对此不感兴趣。元素上的角度模拟方法

问题是,我想测试是否调用元素的方法,在这种情况下,mobiscroll方法。我有以下的代码我的指令的链接方法:

link: function (scope, element, attr) { 
    var datepicker = element.find("input"); 

    scope.showDate = function() {   
     datepicker.mobiscroll('show'); 
    }; 
} 

我想在我的茉莉花测试来检查,如果datepicker.mobiscroll('show')被调用。不过,我不能在我的测试中对元素设置间谍,因为元素的查找不会导致指令中的链接方法中使用完全相同的对象。例如,下面不工作:

targetElement = $compile(elementBluePrint)($scope); 
    rootScope.$apply(); 
    var target = targetElement.find("input"); 
    spyOn(target, "mobiscroll").and.callThrough(); 

因为这是不行的,我怎么能在mobiscroll方法窥探我的角度茉莉花测试?

回答

1

与jQuery(最终,jqLit​​e)元件的共同问题是,每个元素是一个新的对象,它包装DOM元素,

angular.element(element[0]) !== angular.element(element[0]) 

当它们中的一个被修改(在这种情况下,该属性是取而代之的是模拟功能),它不会影响其他。对于所有受到影响的元素,应将其原型模拟为:

spyOn(angular.element.prototype, "mobiscroll").and.callThrough();