TypeScript में कोड कवरेज परीक्षण: अनुमान लगाना बंद करें और मापना शुरू करें
\n\nकल्पना करें कि आप कई गियर वाली एक जटिल मशीन जोड़ रहे हैं। आपको यकीन है कि आपने सब कुछ सही ढंग से जोड़ा है, लेकिन जैसे ही आप "स्टार्ट" बटन दबाते हैं, एक खड़खड़ाहट की आवाज़ आती है और मशीन जाम हो जाती है। परिचित स्थिति? TypeScript डेवलपमेंट की दुनिया में, ऐसी "मशीनें" हमारे एप्लिकेशन हैं। और कोड कवरेज परीक्षण एक गुणवत्ता जांच है जो दिखाता है कि हमने किन भागों की जाँच की और किन्हें संयोग पर छोड़ दिया।
\n\nकई डेवलपर कोड कवरेज मीट्रिक को संदेह की दृष्टि से देखते हैं: "प्रतिशत का पीछा करना बुराई है", "100% कवरेज बग की अनुपस्थिति की गारंटी नहीं देता"। और यह सच है। लेकिन किसी भी उपकरण की तरह, कोड कवरेज उपयोगी या हानिकारक हो सकता है - यह सब इस बात पर निर्भर करता है कि इसका उपयोग कैसे किया जाए। इस लेख में, हम चर्चा करेंगे कि TypeScript में कवरेज को सही तरीके से कैसे मापें, इसके लिए कौन से उपकरण मौजूद हैं, और मीट्रिक को अपने आप में एक लक्ष्य कैसे न बनाएं।
\n\nकोड कवरेज क्या है और TypeScript कोई अपवाद क्यों नहीं है
\n\nकोड कवरेज (code coverage) एक मीट्रिक है जो दिखाता है कि परीक्षणों के दौरान स्रोत कोड का कितना हिस्सा निष्पादित किया गया था। TypeScript में, जो JavaScript में संकलित होता है, कवरेज माप संकलित कोड के स्तर पर होता है, लेकिन आधुनिक उपकरण मूल TS कोड के संदर्भ में परिणामों को खूबसूरती से प्रदर्शित कर सकते हैं।
\n\nजानने योग्य मुख्य कवरेज मीट्रिक:
\n\n- \n
- Line coverage — कोड की उन पंक्तियों का प्रतिशत जो कम से कम एक बार निष्पादित की गईं। \n
- Branch coverage — उन शाखाओं (if/else, switch, ternary ऑपरेटर) का प्रतिशत जिनका परीक्षण किया गया। \n
- Function coverage — उन फ़ंक्शन/मेथड का प्रतिशत जिन्हें कॉल किया गया। \n
- Statement coverage — कोड में अलग-अलग निर्देशों (स्टेटमेंट) का प्रतिशत। \n
TypeScript प्रोजेक्ट के लिए branch coverage विशेष रूप से महत्वपूर्ण है, क्योंकि सख्त टाइपिंग शर्तों में तार्किक त्रुटियों से नहीं बचाती है। आप सभी वेरिएबल को सही ढंग से टाइप कर सकते हैं, लेकिन उस मामले को भूल सकते हैं जब ऐरे खाली हो और फ़ंक्शन कम से कम एक तत्व की अपेक्षा करता हो।
\n\nTypeScript में कवरेज मापने के उपकरण
\n\n1. Istanbul (nyc) — सभी कवरेज का दादा
\n\nIstanbul JavaScript और TypeScript कोड के कवरेज को मापने के लिए सबसे लोकप्रिय उपकरण है। यह एक स्टैंडअलोन उपयोगिता (पैकेज nyc के माध्यम से) या परीक्षण फ्रेमवर्क में एक अंतर्निहित मॉड्यूल के रूप में काम करता है।
TypeScript प्रोजेक्ट में Istanbul के साथ काम शुरू करने के लिए, इंस्टॉल करें:
\n\nnpm install --save-dev nyc typescript ts-node\n\nकॉन्फ़िगरेशन के लिए .nycrc फ़ाइल बनाएं:
{\n "extends": "@istanbuljs/nyc-config-typescript",\n "all": true,\n "include": ["src/**/*.ts"],\n "exclude": ["src/**/*.test.ts", "src/**/*.spec.ts"],\n "reporter": ["text", "html", "lcov"],\n "check-coverage": true,\n "branches": 80,\n "lines": 85,\n "functions": 85,\n "statements": 85\n}\n\nकवरेज के साथ परीक्षण चलाएं:
\n\nnpx nyc mocha --require ts-node/register src/**/*.test.ts\n\nIstanbul कंसोल (text) और HTML पेजों के रूप में रिपोर्ट उत्पन्न करता है, जहाँ कवर किए गए कोड को हरे रंग में और अनकवर्ड कोड को लाल रंग में हाइलाइट किया जाता है। यह बहुत स्पष्ट है।
\n\n2. Jest — सब कुछ एक में
\n\nJest TypeScript के लिए सबसे लोकप्रिय परीक्षण फ्रेमवर्क है। इसमें पहले से ही Istanbul पर आधारित एक अंतर्निहित कवरेज उपकरण शामिल है। आपको कुछ भी अतिरिक्त इंस्टॉल करने की आवश्यकता नहीं है।
\n\njest.config.ts में बुनियादी सेटअप:
import type { Config } from 'jest';\n\nconst config: Config = {\n preset: 'ts-jest',\n testEnvironment: 'node',\n collectCoverage: true,\n coverageDirectory: 'coverage',\n coverageReporters: ['text', 'html', 'lcov'],\n collectCoverageFrom: [\n 'src/**/*.ts',\n '!src/**/*.test.ts',\n '!src/**/*.spec.ts',\n '!src/types/**/*.ts'\n ],\n coverageThresho