जावास्क्रिप्ट में परीक्षण: मॉड्यूलर से एंड-टू-एंड परीक्षण तक
\n\nगुणवत्तापूर्ण परीक्षण जावास्क्रिप्ट में पेशेवर विकास का एक अनिवार्य हिस्सा है। इस लेख में, हम परीक्षण के तीन मुख्य स्तरों पर चर्चा करेंगे: यूनिट (unit), इंटीग्रेशन (integration) और एंड-टू-एंड (e2e) परीक्षण। आप जानेंगे कि किन उपकरणों का उपयोग करना है, Node.js पर परीक्षण कैसे लिखना है, और एक प्रभावी परीक्षण रणनीति कैसे बनानी है।
\n\n1. यूनिट-परीक्षण: परीक्षण पिरामिड का आधार
\n\nयूनिट परीक्षण पृथक मॉड्यूल - फ़ंक्शन, क्लास या अलग-अलग मेथड की जाँच करते हैं। मुख्य नियम: परीक्षण किया जा रहा कोड बाहरी संसाधनों (डेटाबेस, API, फ़ाइल सिस्टम) पर निर्भर नहीं होना चाहिए।
\n\nयूनिट-परीक्षण के लिए उपकरण
\n- \n
- Jest - Facebook का सबसे लोकप्रिय फ्रेमवर्क। इसमें बिल्ट-इन मॉक, स्नैपशॉट और कोड कवरेज शामिल हैं। \n
- Mocha + Chai - उन लोगों के लिए लचीला संयोजन जो सब कुछ मैन्युअल रूप से कॉन्फ़िगर करना पसंद करते हैं। \n
- Vitest - Jest का आधुनिक विकल्प, Vite प्रोजेक्ट्स के लिए अनुकूलित। \n
// Jest पर यूनिट-टेस्ट का उदाहरण\nconst { calculateDiscount } = require('./pricing');\n\ndescribe('calculateDiscount', () => {\n test('1000 से अधिक राशि पर 10% छूट लौटाता है', () => {\n const result = calculateDiscount(1500);\n expect(result).toBe(1350);\n });\n\n test('1000 या उससे कम राशि पर छूट लागू नहीं करता', () => {\n const result = calculateDiscount(500);\n expect(result).toBe(500);\n });\n\n test('सीमा मान 1000 को संभालता है', () => {\n const result = calculateDiscount(1000);\n expect(result).toBe(1000);\n });\n});\n\nयूनिट-परीक्षण की सर्वोत्तम प्रथाएँ
\n- \n
- एक बार में एक ही व्यवहार का परीक्षण करें (प्रति परीक्षण एक assert)। \n
- वर्णनात्मक परीक्षण नामों का उपयोग करें (given/when/then)। \n
- प्राइवेट मेथड का परीक्षण करने से बचें - पब्लिक इंटरफ़ेस का परीक्षण करें। \n
- कोड कवरेज को 70-80% के स्तर पर बनाए रखें। \n
2. इंटीग्रेशन-परीक्षण: घटकों के बीच अंतःक्रिया की जाँच
\n\nइंटीग्रेशन परीक्षण जाँच करते हैं कि विभिन्न मॉड्यूल एक साथ कैसे काम करते हैं। Node.js के संदर्भ में, इसका आमतौर पर अर्थ वास्तविक डेटाबेस, फ़ाइल सिस्टम या बाहरी API के साथ परीक्षण करना है।
\n\nइंटीग्रेशन परीक्षण के विशिष्ट परिदृश्य
\n- \n
- कंट्रोलर का सर्विस लेयर और डेटाबेस के साथ अंतःक्रिया। \n
- Express/Koa के मिडलवेयर और रूट्स की जाँच। \n
- टेस्ट डेटाबेस (मेमोरी में SQLite या Docker में PostgreSQL) के साथ रिपॉजिटरी का परीक्षण। \n
// Supertest और Jest के साथ इंटीग्रेशन टेस्ट का उदाहरण\nconst request = require('supertest');\nconst app = require('../app');\nconst { createTestUser, cleanDatabase } = require('./helpers');\n\nbeforeEach(async () => {\n await cleanDatabase();\n});\n\ndescribe('POST /api/users', () => {\n test('उपयोगकर्ता बनाता है और 201 लौटाता है', async () => {\n const response = await request(app)\n .post('/api/users')\n .send({ name: 'इवान', email: 'ivan@test.com' });\n\n expect(response.status).toBe(201);\n expect(response.body).toHaveProperty('id');\n expect(response.body.name).toBe('इवान');\n });\n\n test('डुप्लिकेट ईमेल पर 400 लौटाता है', async () => {\n await createTestUser({ email: 'ivan@test.com' });\n\n const response = await request(app)\n .post('/api/users')\n .send({ name: 'पीटर', email: 'ivan@test.com' });\n\n expect(response.status).toBe(400);\n expect(response.body.error).toBe('ईमेल पहले से उपयोग में है');\n });\n});\n\nपरीक्षण बुनियादी ढाँचे की स्थापना
\n- \n
- Docker Compose - परीक्षण सेवाओं (DB, Redis) को चालू करने के लिए। \n
- Testcontainers - परीक्षणों से कंटेनरों का प्रोग्रामेटिक प्रबंधन। \n
- इन-मेमोरी डेटाबेस (जैसे, mongodb-memory-server) - बाहरी निर्भरताओं के बिना तेज़ परीक्षणों के लिए। \n