TypeScript में परीक्षण: यूनिट, इंटीग्रेशन, E2E — पूर्ण गाइड

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

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

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

परिचय: TypeScript कोड का परीक्षण क्यों करें?

TypeScript एक शक्तिशाली उपकरण है जो JavaScript में स्थैतिक टाइपिंग जोड़ता है, जिससे संकलन चरण में त्रुटियों को पकड़ा जा सकता है। हालांकि, सबसे सख्त टाइप सिस्टम भी यह गारंटी नहीं देता कि आपका कोड वास्तविक परिस्थितियों में सही ढंग से काम करेगा। तार्किक त्रुटियाँ, सीमा मामलों की गलत हैंडलिंग और मॉड्यूल के एकीकरण की समस्याएँ कंपाइलर के दायरे से बाहर रहती हैं। यहीं पर परीक्षण मदद करता है।

TypeScript में परीक्षण केवल फंक्शन की जाँच नहीं है। यह एक व्यापक प्रक्रिया है जिसमें तीन प्रमुख स्तर शामिल हैं: यूनिट (मॉड्यूलर), इंटीग्रेशन (एकीकरण) और E2E (एंड-टू-एंड)। इनमें से प्रत्येक अपनी समस्या का समाधान करता है और साथ मिलकर वे "टेस्टिंग पिरामिड" बनाते हैं, जो एप्लिकेशन की विश्वसनीयता सुनिश्चित करता है।

इस लेख में, हम देखेंगे कि तीनों स्तरों पर TypeScript के लिए टेस्ट कैसे लिखें, आधुनिक उपकरणों का उपयोग करते हुए: Jest, Supertest और Playwright। आप जानेंगे कि ये टेस्ट किन त्रुटियों को रोकने में मदद करते हैं और उन्हें अपने प्रोजेक्ट में कैसे शामिल करें।



यूनिट-टेस्टिंग: पृथक मॉड्यूल की जाँच

यूनिट-टेस्ट (मॉड्यूलर टेस्ट) पिरामिड की नींव हैं। वे बाहरी निर्भरताओं (डेटाबेस, API, फ़ाइल सिस्टम) से अलग करके अलग-अलग फंक्शन, क्लास या मेथड का परीक्षण करते हैं। मुख्य उद्देश्य यह सुनिश्चित करना है कि आपके एप्लिकेशन का प्रत्येक "बिल्डिंग ब्लॉक" सही ढंग से काम करे।



उपकरण और सेटअप

TypeScript में यूनिट-टेस्टिंग के लिए सबसे लोकप्रिय फ्रेमवर्क Jest है। यह ts-jest या @swc/jest के माध्यम से TypeScript के लिए अंतर्निहित समर्थन प्रदान करता है।

प्रोजेक्ट में Jest स्थापित करना:

npm install --save-dev jest @types/jest ts-jestnpx ts-jest config:init


यूनिट-टेस्ट का उदाहरण

डिस्काउंट की गणना के लिए एक सरल फंक्शन पर विचार करें:

// discount.tsexport function applyDiscount(price: number, discountPercent: number): number {  if (discountPercent < 0 || discountPercent > 100) {    throw new Error('डिस्काउंट प्रतिशत 0 से 100 के बीच होना चाहिए');  }  return price - (price * discountPercent) / 100;}

मुख्य परिदृश्यों को कवर करने वाले यूनिट-टेस्ट लिखें:

// discount.test.tsimport { applyDiscount } from './discount';

describe('applyDiscount', () => { it('20% डिस्काउंट सही ढंग से लागू करना चाहिए', () => { expect(applyDiscount(100, 20)).toBe(80); });

it('0% डिस्काउंट पर मूल कीमत लौटानी चाहिए', () => { expect(applyDiscount(50, 0)).toBe(50); });

it('100% डिस्काउंट पर 0 लौटाना चाहिए', () => { expect(applyDiscount(200, 100)).toBe(0); });

it('नकारात्मक डिस्काउंट पर त्रुटि फेंकनी चाहिए', () => { expect(() => applyDiscount(100, -10)).toThrow('डिस्काउंट प्रतिशत 0 से 100 के बीच होना चाहिए'); });

it('100% से अधिक डिस्काउंट पर त्रुटि फेंकनी चाहिए', () => { expect(() => applyDiscount(100, 150)).toThrow('डिस्काउंट प्रतिशत 0 से 100 के बीच होना चाहिए'); });});

महत्वपूर्ण: यूनिट-टेस्ट को बाहरी संसाधनों तक नहीं पहुँचना चाहिए। इसके बजाय, निर्भरताओं को बदलने के लिए मॉक (mocks) का उपयोग करें, उदाहरण के लिए, jest.mock() के साथ।



इंटीग्रेशन टेस्टिंग: मॉड्यूल के बीच इंटरैक्शन

इंटीग्रेशन टेस्ट जाँचते हैं कि सिस्टम के विभिन्न भाग एक साथ कैसे काम करते हैं। यह सेवा और डेटाबेस, कंट्रोलर और रिपॉजिटरी, या माइक्रोसर्विसेज के बीच इंटरैक्शन हो सकता है। यूनिट-टेस्ट के विपरीत, यहाँ हम घटकों को पूरी तरह से अलग नहीं करते।



उदाहरण: REST API का परीक्षण

मान लीजिए हमारे पास एक एंडपॉइंट वाला Express एप्लिकेशन है। HTTP अनुरोधों के परीक्षण के लिए Supertest का उपयोग करें।

// userController.tsimport { Router, Request, Response } from 'express';

interface User { id: number; name: string;}

const users: User[] = [{ id: 1, name: 'Alice' }];

ब्लॉग

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