TypeScript में TDD: बिना डर के कोड लिखें

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

अनुमान लगाना बंद करें: TDD कोई मसोकिज़्म नहीं, बल्कि एक सुपरपावर है

\n\n

कल्पना करें: आप कोड लिख रहे हैं। सब कुछ काम कर रहा है। आप खुश हैं। एक महीने बाद प्रोजेक्ट पर वापस आते हैं, एक छोटा सा बदलाव करते हैं — और सब कुछ टूट जाता है। परिचित लग रहा है? अब कल्पना करें कि आपके पास एक सुरक्षा जाल है जो हर गलती को एक सेकंड में पकड़ लेता है। यही है TypeScript में TDD — टेस्ट-ड्रिवेन डेवलपमेंट।

\n\n

कई डेवलपर्स सोचते हैं कि TDD सिर्फ परफेक्शनिस्टों या NASA प्रोजेक्ट्स के लिए है। स्पॉयलर: ऐसा नहीं है। Test Driven Development एक ऐसा टूल है जो डीबगिंग के घंटे बचाता है, कोड की गुणवत्ता बढ़ाता है और रिफैक्टरिंग को सुरक्षित बनाता है। इस लेख में हम TypeScript TDD को वास्तविक उदाहरणों के साथ समझेंगे, बिना किसी बकवास के।

\n\n

अगर आप TypeScript में लिखते हैं और अपने ही बदलावों से डरना बंद करना चाहते हैं — तो आगे पढ़ें। दिलचस्प होने वाला है।

\n\n

TDD क्या है (और यह सिर्फ "टेस्ट लिखना" क्यों नहीं है)

\n\n

TDD (Test-Driven Development) एक ऐसी पद्धति है जहाँ टेस्ट कोड से पहले लिखे जाते हैं। पागलपन लगता है? केवल पहली नज़र में। TDD चक्र तीन चरणों का होता है:

\n\n
    \n
  1. लाल (Red) — एक ऐसा टेस्ट लिखें जो निश्चित रूप से फेल होगा, क्योंकि कोड अभी मौजूद नहीं है।
  2. \n
  3. हरा (Green) — न्यूनतम कोड लिखें ताकि टेस्ट पास हो जाए।
  4. \n
  5. रिफैक्टर (Refactor) — कोड को बेहतर बनाएं, उसके व्यवहार को बदले बिना।
  6. \n
\n\n

और यह चक्र बार-बार दोहराया जाता है। हर नई सुविधा एक टेस्ट से शुरू होती है। यह अनुशासन सिखाता है, API डिज़ाइन के बारे में पहले से सोचने पर मजबूर करता है, और विश्वास दिलाता है कि सब कुछ सही चल रहा है।

\n\n

वैसे, TypeScript यूनिट टेस्ट सिर्फ "फंक्शन चेक" नहीं हैं। ये डॉक्यूमेंटेशन, स्पेसिफिकेशन और बीमा — तीनों एक साथ हैं।

\n\n

TypeScript में TDD के लिए टूल्स: क्या इंस्टॉल करना है

\n\n

TypeScript टेस्टिंग के लिए हमें चाहिए:

\n\n
    \n
  • Jest — सबसे लोकप्रिय टेस्टिंग फ्रेमवर्क। TypeScript के साथ बॉक्स से बाहर काम करता है।
  • \n
  • ts-jest — Jest के लिए प्रीसेट, ताकि वह बिना अतिरिक्त कॉन्फ़िगरेशन के TypeScript को समझ सके।
  • \n
  • @types/jest — IDE में ऑटो-कम्प्लीशन के लिए टाइप्स।
  • \n
\n\n

एक कमांड में इंस्टॉलेशन:

\n\n
npm install --save-dev jest ts-jest @types/jest typescript
\n\n

package.json में टेस्ट चलाने के लिए स्क्रिप्ट जोड़ें:

\n\n
"scripts": {\n  "test": "jest",\n  "test:watch": "jest --watch"\n}
\n\n

अब आप TypeScript में टेस्ट-ड्रिवेन डेवलपमेंट के लिए तैयार हैं।

\n\n

TDD के साथ पहला टेस्ट लिखें: लाल से हरे तक

\n\n

मान लीजिए हमें एक फंक्शन लिखना है जो जाँचता है कि स्ट्रिंग पैलिंड्रोम है या नहीं। TDD के क्लासिक तरीके से — टेस्ट से शुरू करते हैं।

\n\n

चरण 1. लाल (Red)

\n\n

isPalindrome.test.ts फ़ाइल बनाएँ:

\n\n
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\n
npm test
\n\n

एरर दिखेगा: Cannot find module './isPalindrome'। बढ़िया, लाल चरण पूरा हुआ। अब हमें कोड लिखना है ताकि टेस्ट पास हो जाए।

\n\n

चरण 2. हरा (Green)

\n\n

न्यूनतम इम्प्लीमेंटेशन के साथ isPalindrome.ts बनाएँ:

\n\n
export function isPalindrome(str: string): boolean {\n  return str === str.split('').reverse().join('');\n}
\n\n

टेस्ट फिर से चलाएँ — हरा! दोनों टेस्ट पास हो गए। लेकिन अभी सब कुछ खत्म नहीं हुआ है।

\n\n

चरण 3. रिफैक्टर (Refactor)

\n\n

हमारा फंक्शन काम करता है, लेकिन एक समस्या है: यह स्पेस और अलग-अलग केस वाली स्ट्रिंग्स को हैंडल नहीं करता। एक नया टेस्ट जोड़ें:

\n\n
it('केस और स्पेस को इग्नोर करना चाहिए',

ब्लॉग

पुस्तक अनुशंसाएँ