/ / यूनिट परीक्षण एक निर्देश का उपयोग करता है जो क्लाइंटहाइट - एंगुलरज, यूनिट-टेस्टिंग, एंगुलरज-निर्देश का उपयोग करता है

यूनिट एक निर्देश का परीक्षण करता है जो क्लाइंट हाइट - एंजुलरजेस, यूनिट-टेस्टिंग, एंजुलरजेस-निर्देश का उपयोग करता है

मेरे पास एक निर्देश है जो क्लाइंटहाइट को देखता हैगतिशील ऊंचाई के साथ एक तत्व और उस मान का एक स्कोप वैरिएबल सेट करता है, लेकिन मैं "यह पता लगा सकता हूं कि यूनिट का परीक्षण कैसे किया जाए। सब कुछ मैंने यूनिट परीक्षणों में किया है, क्लाइंटहाइट हमेशा 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();
...