मैं एक इस्तांबुल कवरेज रिपोर्ट कैसे पढ़ूं?


131

मैंने हमेशा अपने यूनिट परीक्षणों के लिए जैस्मीन का उपयोग किया है, लेकिन हाल ही में मैंने इस्तांबुल का उपयोग मुझे कोड कवरेज रिपोर्ट देने के लिए शुरू किया। मेरा मतलब है कि मुझे इस बात का आभास है कि वे मुझे क्या बताने की कोशिश कर रहे हैं, लेकिन मैं वास्तव में नहीं जानता कि इनमें से प्रत्येक प्रतिशत क्या दर्शाता है (Stmts, Branches, Funcs, Lines)। अब तक Googling मैं एक ठोस स्पष्टीकरण / संसाधन खोजने में असमर्थ रहा हूं।

प्रश्न : जैसा मैंने कहा था कि मुझे इसका पता चल गया है, लेकिन क्या कोई व्यक्ति या तो उचित स्पष्टीकरण दे सकता है या उचित स्पष्टीकरण के लिए लिंक दे सकता है?

तृतीयक प्रश्न : क्या आपके कोड के विशिष्ट भागों को कवर नहीं करने की पहचान करने का कोई तरीका है? अब तक वास्तव में इस रिपोर्ट को टटोलने के बिना मैं मूल रूप से अनुमान लगा रहा हूं।

-------------------|-----------|-----------|-----------|-----------|
File               |   % Stmts |% Branches |   % Funcs |   % Lines |
-------------------|-----------|-----------|-----------|-----------|
   controllers/    |      88.1 |     77.78 |     78.57 |      88.1 |
      dashboard.js |      88.1 |     77.78 |     78.57 |      88.1 |
-------------------|-----------|-----------|-----------|-----------|
All files          |      88.1 |     77.78 |     78.57 |      88.1 |
-------------------|-----------|-----------|-----------|-----------|

3
रनिंग istanbul को रिपोर्ट के लिए एक HTML फ़ाइल भी तैयार करनी चाहिए (कवरेज फ़ोल्डर में होनी चाहिए)। जब आप फ़ाइलों / फ़ोल्डरों पर क्लिक करते हैं तो यह HTML आपको ड्रिल-डाउन जानकारी देनी चाहिए
यारोन श्वािमर

धन्यवाद @ आर्यन्स। यह निश्चित रूप से कवरेज में ड्रिल करने में मदद करता है और पहचानता है कि क्या विशेष रूप से कवर नहीं किया जा रहा है। मुझे अभी भी वास्तव में गहराई से समझ नहीं आया है कि प्रतिशत का क्या अर्थ है / /।
स्कॉट स्वॉर्ड

जवाबों:


217

कई कवरेज मानदंड हैं, जिनमें से मुख्य हैं:

  • फंक्शन कवरेज क्या प्रोग्राम में प्रत्येक फ़ंक्शन (या सबरूटीन) को बुलाया गया है?
  • स्टेटमेंट कवरेज क्या प्रोग्राम के प्रत्येक स्टेटमेंट को निष्पादित किया गया है?
  • शाखा कवरेज क्या प्रत्येक शाखा को (प्रत्येक को डीडी-पथ भी कहा जाता है) प्रत्येक नियंत्रण संरचना (जैसे कि अगर और केस स्टेटमेंट में) को निष्पादित किया गया है? उदाहरण के लिए, यदि एक बयान दिया गया है, तो क्या सच्ची और झूठी दोनों शाखाओं को निष्पादित किया गया है? यह कहने का एक और तरीका है, क्या कार्यक्रम के प्रत्येक किनारे को निष्पादित किया गया है?
  • लाइन कवरेज है स्रोत फ़ाइल में प्रत्येक निष्पादन योग्य लाइन निष्पादित की गई है?

प्रत्येक मामले के लिए, प्रतिशत निष्पादित कोड बनाम नहीं-निष्पादित कोड का प्रतिनिधित्व करता है , जो प्रतिशत स्वरूप में प्रत्येक अंश के बराबर होता है (जैसे: 50% शाखाएं, 1/2)।

फ़ाइल रिपोर्ट में:

  • 'E' 'और रास्ता नहीं लिया' के लिए खड़ा है, जिसका मतलब है कि चिह्नित के लिए अगर / और बयान, 'अगर' पथ का परीक्षण किया गया है, लेकिन 'और' नहीं।
  • 'I' 'अगर रास्ता नहीं लिया गया है', जिसका विपरीत मामला है: 'अगर' का परीक्षण नहीं किया गया है तो इसका मतलब है।
  • xNबाएँ स्तंभ में समय की राशि है कि लाइन निष्पादित किया गया है।
  • निष्पादित लाइनों, या कोड के टुकड़ों को लाल रंग में हाइलाइट नहीं किया जाएगा।

यह इस्तांबुल v0.4.0 के लिए सत्यापित किया गया है, मुझे यकीन नहीं है कि यह अभी भी बाद के संस्करणों के लिए लागू होता है, लेकिन यह कि पुस्तकालय ठोस सिद्धांत सिद्धांतों पर आधारित है, नए संस्करणों के लिए व्यवहार बहुत अधिक नहीं बदलना चाहिए।

यह कुछ रंग कोड भी प्रदान करता है -

गुलाबी : बयान कवर नहीं।

नारंगी : कवर किए गए कार्य नहीं।

पीला : शाखाओं को कवर नहीं।

पूर्ण इस्तांबुल डॉक्स यहां:

https://istanbul.js.org

कोड कवरेज पर अधिक गहराई से सिद्धांत के लिए:

https://en.wikipedia.org/wiki/Code_coverage

आशा करता हूँ की ये काम करेगा!


8

रनिंग istanbul को रिपोर्ट के लिए एक HTML फ़ाइल भी तैयार करनी चाहिए (कवरेज फ़ोल्डर में होनी चाहिए)। जब आप फ़ाइलों / फ़ोल्डरों पर क्लिक करते हैं तो यह HTML आपको ड्रिल-डाउन जानकारी देनी चाहिए।

कवर किए गए फ़ंक्शंस के प्रतिशत की गणना उन कार्यों की संख्या से की जाती है, जिन्हें परीक्षणों के दौरान बुलाया गया था, जिन्हें फ़ंक्शंस की कुल संख्या से विभाजित किया गया था। समान लाइनों और बयानों के लिए जाता है (जो आमतौर पर एक दूसरे के करीब होंगे जब तक कि आपके पास बहुत लंबे बयान न हों)। शाखाओं का अर्थ है if-elseब्लॉक जैसे निर्णय बिंदु । उदाहरण के लिए, मान लें कि आपके कोड में केवल एक if-elseकथन है, और आपके परीक्षण केवल ifभाग के माध्यम से नहीं बल्कि भाग से गुजरते हैं else, फिर आपकी शाखाओं का प्रतिशत 50% होना चाहिए।

आशा है कि चीजों को स्पष्ट करता है।


मैं निर्दिष्ट करके इस्तांबुल भाग गया "test" : "nyc mocha"में package.json। मेरा कवरेज फ़ोल्डर रिक्त है। विचार?
TheCrazyProgrammer

1
मैंने html रिपोर्टर जोड़ा। यह अब काम करता है। "test" : "nyc --reporter=html mocha"
theCrazyProgrammer

एक उदाहरण के रूप में: यदि आपके पास एक बड़ी-शाखा है और एक छोटी शाखा-शाखा है, और केवल अगर-शाखा चलती है, तो लाइन कवरेज बहुत अच्छी लगेगी, लेकिन शाखा कवरेज अभी भी केवल ५०% होगी। साथ ही, यदि आप स्टेटमेंट को अर्धविराम से अलग करते हैं या यदि पंक्ति में एक फ़ंक्शन परिभाषा (जिसमें स्वयं के कथन शामिल हैं) शामिल हैं, तो आप प्रति पंक्ति में कई कथन रख सकते हैं। यदि स्टेटमेंट अंतिम अर्धविराम से पहले लाइन ब्रेक है, तो आप प्रति कथन कई पंक्तियाँ रख सकते हैं।
हेव वोल्फ

0

पिछले उत्तरों में जोड़ना

% विवरणों की गणना आपके परीक्षण द्वारा कवर किए गए कथनों की संख्या का प्रतिशत लेकर की जाती है जैसे 12/18 * 100 = 66.67%। इसका मतलब है कि आपका परीक्षण केवल 66.67% कवर किया गया।

% ब्रांच की गणना भी उसी तरह की जाती है। आपके% फ़ंक्शंस और% लाइनों के लिए भी।

आपके प्रोजेक्ट रूट डायरेक्टरी में, एक कवरेज फ़ोल्डर होता है जिसमें आपके परीक्षण का HTML आउटपुट होता है। उस पर क्लिक करें और इसे ब्राउज़र में देखें। आपको कुछ इस तरह से देखना चाहिए

आपके परीक्षा परिणामों का आउटपुट दिखाने वाली छवि

मुझे उम्मीद है कि यह आपको इसे बेहतर ढंग से समझने में मदद करेगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.