TypeScript में परीक्षण: यूनिट, इंटीग्रेशन, E2E (उन्नत स्तर)

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

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

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

TypeScript में उन्नत परीक्षण: यूनिट से E2E तक

\n\n

परीक्षण केवल कोड की कार्यक्षमता की जाँच नहीं है, बल्कि TypeScript पर पेशेवर विकास की नींव है। उन्नत स्तर पर, हम सरल assert-ov से आगे बढ़कर पृथक, तेज़ और विश्वसनीय परीक्षण पिरामिड बनाने की ओर बढ़ते हैं। इस लेख में, हम TypeScript पारिस्थितिकी तंत्र के सर्वोत्तम उपकरणों का उपयोग करके यूनिट, इंटीग्रेशन और e2e-परीक्षण के व्यावहारिक दृष्टिकोणों का विश्लेषण करेंगे।

\n\n

1. Jest और TypeScript के साथ उन्नत यूनिट-परीक्षण

\n\n

यूनिट-टेस्ट पृथक मॉड्यूल की जाँच करते हैं। TypeScript में मुख्य चुनौती निर्भरताओं, प्रकारों और अतुल्यकालिकता के साथ काम करना है।

\n\n

1.1. jest.mocked के साथ मॉक और टाइपिंग

\n

मॉक की पूर्ण टाइपिंग के लिए jest.mocked का उपयोग करें। यह सुनिश्चित करता है कि आप कोई अस्तित्वहीन विधि को कॉल नहीं करेंगे।

\n\n
import { fetchUserData } from './api';\nimport { processUser } from './userProcessor';\n\njest.mock('./api');\n\nconst mockedFetchUserData = jest.mocked(fetchUserData);\n\ndescribe('processUser', () => {\n  it('देना चाहिए उपयोगकर्ता डेटा को संसाधित करें', async () => {\n    const mockUser = { id: 1, name: 'Alice', email: 'alice@test.com' };\n    mockedFetchUserData.mockResolvedValue(mockUser);\n\n    const result = await processUser(1);\n\n    expect(result).toEqual({\n      displayName: 'Alice',\n      contact: 'alice@test.com'\n    });\n    expect(mockedFetchUserData).toHaveBeenCalledWith(1);\n  });\n\n  it('देना चाहिए ईमेल न होने पर त्रुटि फेंकें', async () => {\n    mockedFetchUserData.mockResolvedValue({ id: 2, name: 'Bob', email: null });\n    await expect(processUser(2)).rejects.toThrow('Email is required');\n  });\n});\n
\n\n

1.2. जटिल प्रकारों और generics का परीक्षण

\n

जेनेरिक वाले फ़ंक्शन के लिए, दोहराव से बचने के लिए सहायक परीक्षण प्रकार बनाएँ।

\n\n
// कोड\nfunction getFirstElement<T>(arr: T[]): T | undefined {\n  return arr[0];\n}\n\n// परीक्षण\ntype TestArray = number[];\nconst array: TestArray = [10, 20, 30];\n\ndescribe('getFirstElement', () => {\n  it('देना चाहिए पहला संख्या तत्व लौटाएँ', () => {\n    const result = getFirstElement(array);\n    expect(result).toBe(10);\n    // TypeScript स्वचालित रूप से number प्रकार का अनुमान लगाता है\n  });\n\n  it('देना चाहिए खाली सरणी के लिए undefined लौटाएँ', () => {\n    const result = getFirstElement([]);\n    expect(result).toBeUndefined();\n  });\n});\n
\n\n

2. इंटीग्रेशन परीक्षण: डेटाबेस और API

\n\n

इंटीग्रेशन टेस्ट मॉड्यूल के बीच परस्पर क्रिया की जाँच करते हैं: कंट्रोलर, सेवाएँ और डेटाबेस। Node.js पर TypeScript अनुप्रयोगों के लिए, Jest + Supertest + Testcontainers का संयोजन आदर्श है।

\n\n

2.1. Testcontainers के साथ परीक्षण डेटाबेस सेटअप

\n

Testcontainers Docker में PostgreSQL को चालू करता है, प्रत्येक परीक्षण के लिए एक स्वच्छ वातावरण सुनिश्चित करता है।

\n\n
import { PostgreSqlContainer, StartedPostgreSqlContainer } from '@testcontainers/postgresql';\nimport { Client } from 'pg';\n\nlet container: StartedPostgreSqlContainer;\nlet client: Client;\n\nbeforeAll(async () => {\n  container = await new PostgreSqlContainer().start();\n  client = new Client({\n    connectionString: container.getConnectionUri()\n  });\n  await client.connect();\n  await client.query(`\n    CREATE TABLE users (\n      id SERIAL PRIMARY KEY,\n      name VARCHAR(100) NOT NULL,\n      email VARCHAR(100) UNIQUE NOT NULL\n    );\n  `);\n}, 30000); // इमेज डाउनलोड करने के लिए 30 सेकंड का टाइमआउट\n\nafterAll(async () => {\n  await client.end();\n  await container.stop();\n});\n\ndescribe('User Repository', () => {\n  it('देना चाहिए उपयोगकर्ता बनाएँ और लौटाएँ', async () => {\n    const res = await client.query(\n      `INSERT INTO users (name, email) VALUES ($1, $2) RETURNING *`,\n      ['Test', 'test@example.com']\n    );\n    expect(res.rows[0].name).toBe('Test');\n  });\n});\n
\n\n

2.2. Supertest के साथ REST API का परीक्षण

\n

Express-एप्लिकेशन चलाएँ और परीक्षण

ब्लॉग

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