अनुमान लगाना बंद करें: TDD कोई मसोकिज़्म नहीं, बल्कि एक सुपरपावर है
\n\nकल्पना करें: आप कोड लिख रहे हैं। सब कुछ काम कर रहा है। आप खुश हैं। एक महीने बाद प्रोजेक्ट पर वापस आते हैं, एक छोटा सा बदलाव करते हैं — और सब कुछ टूट जाता है। परिचित लग रहा है? अब कल्पना करें कि आपके पास एक सुरक्षा जाल है जो हर गलती को एक सेकंड में पकड़ लेता है। यही है TypeScript में TDD — टेस्ट-ड्रिवेन डेवलपमेंट।
\n\nकई डेवलपर्स सोचते हैं कि TDD सिर्फ परफेक्शनिस्टों या NASA प्रोजेक्ट्स के लिए है। स्पॉयलर: ऐसा नहीं है। Test Driven Development एक ऐसा टूल है जो डीबगिंग के घंटे बचाता है, कोड की गुणवत्ता बढ़ाता है और रिफैक्टरिंग को सुरक्षित बनाता है। इस लेख में हम TypeScript TDD को वास्तविक उदाहरणों के साथ समझेंगे, बिना किसी बकवास के।
\n\nअगर आप TypeScript में लिखते हैं और अपने ही बदलावों से डरना बंद करना चाहते हैं — तो आगे पढ़ें। दिलचस्प होने वाला है।
\n\nTDD क्या है (और यह सिर्फ "टेस्ट लिखना" क्यों नहीं है)
\n\nTDD (Test-Driven Development) एक ऐसी पद्धति है जहाँ टेस्ट कोड से पहले लिखे जाते हैं। पागलपन लगता है? केवल पहली नज़र में। TDD चक्र तीन चरणों का होता है:
\n\n- \n
- लाल (Red) — एक ऐसा टेस्ट लिखें जो निश्चित रूप से फेल होगा, क्योंकि कोड अभी मौजूद नहीं है। \n
- हरा (Green) — न्यूनतम कोड लिखें ताकि टेस्ट पास हो जाए। \n
- रिफैक्टर (Refactor) — कोड को बेहतर बनाएं, उसके व्यवहार को बदले बिना। \n
और यह चक्र बार-बार दोहराया जाता है। हर नई सुविधा एक टेस्ट से शुरू होती है। यह अनुशासन सिखाता है, API डिज़ाइन के बारे में पहले से सोचने पर मजबूर करता है, और विश्वास दिलाता है कि सब कुछ सही चल रहा है।
\n\nवैसे, TypeScript यूनिट टेस्ट सिर्फ "फंक्शन चेक" नहीं हैं। ये डॉक्यूमेंटेशन, स्पेसिफिकेशन और बीमा — तीनों एक साथ हैं।
\n\nTypeScript में TDD के लिए टूल्स: क्या इंस्टॉल करना है
\n\nTypeScript टेस्टिंग के लिए हमें चाहिए:
\n\n- \n
- Jest — सबसे लोकप्रिय टेस्टिंग फ्रेमवर्क। TypeScript के साथ बॉक्स से बाहर काम करता है। \n
- ts-jest — Jest के लिए प्रीसेट, ताकि वह बिना अतिरिक्त कॉन्फ़िगरेशन के TypeScript को समझ सके। \n
- @types/jest — IDE में ऑटो-कम्प्लीशन के लिए टाइप्स। \n
एक कमांड में इंस्टॉलेशन:
\n\nnpm install --save-dev jest ts-jest @types/jest typescript\n\npackage.json में टेस्ट चलाने के लिए स्क्रिप्ट जोड़ें:
"scripts": {\n "test": "jest",\n "test:watch": "jest --watch"\n}\n\nअब आप TypeScript में टेस्ट-ड्रिवेन डेवलपमेंट के लिए तैयार हैं।
\n\nTDD के साथ पहला टेस्ट लिखें: लाल से हरे तक
\n\nमान लीजिए हमें एक फंक्शन लिखना है जो जाँचता है कि स्ट्रिंग पैलिंड्रोम है या नहीं। TDD के क्लासिक तरीके से — टेस्ट से शुरू करते हैं।
\n\nचरण 1. लाल (Red)
\n\nisPalindrome.test.ts फ़ाइल बनाएँ:
import { isPalindrome } from './isPalindrome';\n\ndescribe('isPalindrome', () => {\n it('"racecar" के लिए true लौटाना चाहिए', () => {\n expect(isPalindrome('racecar')).toBe(true);\n });\n\n it('"hello" के लिए false लौटाना चाहिए', () => {\n expect(isPalindrome('hello')).toBe(false);\n });\n});\n\nटेस्ट चलाएँ:
\n\nnpm test\n\nएरर दिखेगा: Cannot find module './isPalindrome'। बढ़िया, लाल चरण पूरा हुआ। अब हमें कोड लिखना है ताकि टेस्ट पास हो जाए।
चरण 2. हरा (Green)
\n\nन्यूनतम इम्प्लीमेंटेशन के साथ isPalindrome.ts बनाएँ:
export function isPalindrome(str: string): boolean {\n return str === str.split('').reverse().join('');\n}\n\nटेस्ट फिर से चलाएँ — हरा! दोनों टेस्ट पास हो गए। लेकिन अभी सब कुछ खत्म नहीं हुआ है।
\n\nचरण 3. रिफैक्टर (Refactor)
\n\nहमारा फंक्शन काम करता है, लेकिन एक समस्या है: यह स्पेस और अलग-अलग केस वाली स्ट्रिंग्स को हैंडल नहीं करता। एक नया टेस्ट जोड़ें:
\n\nit('केस और स्पेस को इग्नोर करना चाहिए',