2016-05-06 115 views
0

我有一個指令,觀察具有動態高度的元素的clientHeight,並將範圍變量設置爲該值,但我無法弄清楚如何進行單元測試。我在單元測試中所做的所有事情,clientHeight總是返回0.我已經嘗試了許多不同的解決方案,我在這裏閱讀了類似的問題,但都沒有成功。單元測試使用clientHeight的指令

這裏是指令:

return { 
    link: function (scope, element, attrs) { 
    scope.$watch(function() { return element[0].clientHeight; }, 
     function(newValue, oldValue) { 
     if (newValue !== oldValue) { 
      scope.$parent.headerHeight = newValue; 
     } 
     }, true); 
    } 
}; 

回答

0

分離DOM元素的尺寸都是0被測量,並且在試驗結束拆除之前它的尺寸的元件應被附加到DOM:

element = $compile('<directive>')(scope); 
angular.element(document.body).append(element); 
scope.$digest(); 
... 
element.remove(); 

爲了有效地除了DOM(這是E2E測試,而不是單元測試的域)匿名手錶功能應該暴露在範圍測試它

scope._getHeight = function() { return element[0].clientHeight; }; 
scope.$watch('_getHeight()', ...); 

和嘲笑,因爲它是測試,而不是瀏覽器渲染引擎指令邏輯:

element = $compile('<directive>')(scope); 
spyOn(scope, '_getHeight').and.returnValue(100); 
scope.$digest(); 
...