2016-05-06 50 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(); 
...