जावास्क्रिप्ट में परीक्षण: Unit, Integration और E2E परीक्षण
परीक्षण किसी भी गुणवत्ता वाले सॉफ्टवेयर के विकास का एक अभिन्न अंग है। जावास्क्रिप्ट की दुनिया में (विशेष रूप से Node.js इकोसिस्टम में), परीक्षण के तीन मुख्य स्तर हैं: unit-परीक्षण (मॉड्यूलर), इंटीग्रेशन परीक्षण और E2E परीक्षण (एंड-टू-एंड)। उनमें से प्रत्येक अपने स्वयं के कार्यों को हल करता है और विकास के विभिन्न चरणों में उपयोग किया जाता है। इस लेख में, हम प्रत्येक प्रकार का विश्लेषण करेंगे, कोड उदाहरण दिखाएंगे और व्यावहारिक सिफारिशें देंगे।
1. Unit-परीक्षण (मॉड्यूलर परीक्षण)
Unit-परीक्षण कोड की अलग-अलग, पृथक इकाइयों की जाँच करते हैं — फ़ंक्शन, मेथड या क्लास। मुख्य लक्ष्य यह सुनिश्चित करना है कि प्रत्येक "इकाई" शेष सिस्टम से स्वतंत्र रूप से सही ढंग से काम करे। Node.js में, इसके लिए अक्सर Jest या Mocha का उपयोग Chai के साथ किया जाता है।
Jest पर unit-परीक्षण का उदाहरण
मान लीजिए कि हमारे पास छूट की गणना के लिए एक सरल फ़ंक्शन है:
// discount.jsfunction calculateDiscount(price, percent) { if (typeof price !== 'number' || typeof percent !== 'number') { throw new Error('दोनों आर्गुमेंट संख्याएँ होनी चाहिए'); } if (price < 0 || percent < 0 || percent > 100) { throw new Error('अमान्य मान'); } return price - (price * percent / 100);}
module.exports = calculateDiscount;इस फ़ंक्शन के लिए परीक्षण:
// discount.test.jsconst calculateDiscount = require('./discount');
describe('calculateDiscount', () => { test('1000 पर 10% छूट की सही गणना करता है', () => { expect(calculateDiscount(1000, 10)).toBe(900); });
test('100% छूट पर 0 लौटाता है', () => { expect(calculateDiscount(500, 100)).toBe(0); });
test('नकारात्मक मूल्य पर त्रुटि फेंकता है', () => { expect(() => calculateDiscount(-100, 10)).toThrow('अमान्य मान'); });
test('गैर-संख्यात्मक आर्गुमेंट पर त्रुटि फेंकता है', () => { expect(() => calculateDiscount('100', 10)).toThrow('दोनों आर्गुमेंट संख्याएँ होनी चाहिए'); });});- लाभ: तेज़, लिखने में आसान, समस्या वाले मॉड्यूल को सटीक रूप से इंगित करते हैं।
- नुकसान: घटकों के बीच इंटरैक्शन की जाँच नहीं करते।
- कब उपयोग करें: बिज़नेस लॉजिक फ़ंक्शन, यूटिलिटी, वैलिडेटर के लिए।
2. इंटीग्रेशन परीक्षण (Integration tests)
इंटीग्रेशन परीक्षण जाँच करते हैं कि विभिन्न मॉड्यूल या सेवाएँ एक साथ कैसे काम करती हैं। उदाहरण के लिए, डेटाबेस, बाहरी API या फ़ाइल सिस्टम के साथ इंटरैक्शन। Node.js में, ऐसे परीक्षणों के लिए अक्सर Supertest (HTTP अनुरोधों के लिए) और Jest का उपयोग किया जाता है।
Express एप्लिकेशन के लिए इंटीग्रेशन परीक्षण का उदाहरण
मान लीजिए कि हमारे पास उपयोगकर्ता बनाने के लिए एंडपॉइंट वाला एक सरल Express सर्वर है:
// server.jsconst express = require('express');const app = express();app.use(express.json());
const users = [];
app.post('/users', (req, res) => { const { name, email } = req.body; if (!name || !email) { return res.status(400).json({ error: 'Name and email are required' }); } const user = { id: users.length + 1, name, email }; users.push(user); res.status(201).json(user);});
module.exports = app;Supertest के साथ इंटीग्रेशन परीक्षण:
// server.test.jsconst request = require('supertest');const app = require('./server');
describe('POST /users', () => { test('मान्य डेटा के साथ एक नया उपयोगकर्ता बनाता है', async () => { const response = await request(app) .post('/users') .send({ name: 'इवान', email: 'ivan@example.com' });
expect(response.statusCode).toBe(201); expect(response.body).toHaveProperty('id'); expect(response.bo
```