2016-01-06 66 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();