मेरे पास एक निर्देश है जो क्लाइंटहाइट को देखता हैगतिशील ऊंचाई के साथ एक तत्व और उस मान का एक स्कोप वैरिएबल सेट करता है, लेकिन मैं "यह पता लगा सकता हूं कि यूनिट का परीक्षण कैसे किया जाए। सब कुछ मैंने यूनिट परीक्षणों में किया है, क्लाइंटहाइट हमेशा 0. रिटर्न करता है।" अलग-अलग समाधानों की संख्या मैं "यहाँ पर समान समस्याओं के लिए पढ़ता हूं, लेकिन उनमें से कोई भी काम नहीं करता है।"
यहाँ निर्देश है:
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 № 1अलग किए गए DOM तत्व के आयाम 0. हैं। तत्व को उसके आयामों को मापने और परीक्षण के अंत में फाड़ने से पहले DOM में जोड़ा जाना चाहिए:
element = $compile("<directive>")(scope);
angular.element(document.body).append(element);
scope.$digest();
...
element.remove();
डोम (जो ई 2 ई परीक्षणों का क्षेत्र है, इकाई परीक्षण नहीं है) के अलावा इसे कुशलतापूर्वक परीक्षण करने के लिए अनाम घड़ी फ़ंक्शन को गुंजाइश के संपर्क में लाना चाहिए
scope._getHeight = function () { return element[0].clientHeight; };
scope.$watch("_getHeight()", ...);
और इसका मज़ाक उड़ाया गया है, क्योंकि यह निर्देशात्मक तर्क है जिसका परीक्षण किया गया है, न कि ब्राउज़र रेंडरिंग इंजन:
element = $compile("<directive>")(scope);
spyOn(scope, "_getHeight").and.returnValue(100);
scope.$digest();
...