जावास्क्रिप्ट में परीक्षण: Unit, Integration, E2E — पूर्ण मार्गदर्शिका
कोड की गुणवत्ता किसी भी प्रोजेक्ट की सफलता की कुंजी है। जावास्क्रिप्ट (विशेषकर Node.js) की दुनिया में, परीक्षण केवल एक अच्छी प्रथा नहीं, बल्कि एक आवश्यकता बन गया है। हम तीन प्रमुख स्तरों को समझते हैं: मॉड्यूलर (unit), इंटीग्रेशन (integration) और एंड-टू-एंड (E2E) टेस्ट। आप जानेंगे कि वे कैसे भिन्न हैं, प्रत्येक प्रकार का उपयोग कब करना है, और लोकप्रिय टूल पर काम करने वाले उदाहरण देखेंगे।
1. Unit-परीक्षण: पृथक मॉड्यूल की जाँच
Unit-टेस्ट बाहरी निर्भरताओं (डेटाबेस, API, फ़ाइल सिस्टम) से अलग करके व्यक्तिगत फ़ंक्शन, क्लास या मॉड्यूल के काम की जाँच करते हैं। यह सबसे तेज़ और विश्वसनीय स्तर है।
उपकरण और सेटअप
सबसे लोकप्रिय फ्रेमवर्क Jest है। इंस्टॉलेशन:
npm install --save-dev jestpackage.json में स्क्रिप्ट जोड़ें:
"scripts": { "test": "jest"}उदाहरण: डिस्काउंट गणना फ़ंक्शन का परीक्षण
फ़ाइल discount.js बनाएँ:
// discount.jsfunction applyDiscount(price, discountPercent) { if (price <= 0) throw new Error('Price must be positive'); if (discountPercent < 0 || discountPercent > 100) throw new Error('Invalid discount'); return price - (price * discountPercent) / 100;}module.exports = { applyDiscount };अब discount.test.js में unit-टेस्ट लिखें:
const { applyDiscount } = require('./discount');
describe('applyDiscount', () => { test('calculates 10% discount correctly', () => { expect(applyDiscount(100, 10)).toBe(90); });
test('throws error for negative price', () => { expect(() => applyDiscount(-10, 10)).toThrow('Price must be positive'); });
test('throws error for invalid discount percent', () => { expect(() => applyDiscount(100, 150)).toThrow('Invalid discount'); });});चलाएँ: npm test. Jest स्वचालित रूप से *.test.js फ़ाइलें ढूँढ लेगा।
सुझाव: बाहरी सेवाओं से अलग करने के लिए mock-ऑब्जेक्ट का उपयोग करें।
// बाहरी API के मॉक का उदाहरणjest.mock('./api');const api = require('./api');api.getData.mockResolvedValue({ id: 1 });2. इंटीग्रेशन परीक्षण: घटकों के बीच परस्पर क्रिया की जाँच
Integration-टेस्ट जाँचते हैं कि विभिन्न मॉड्यूल एक साथ कैसे काम करते हैं: डेटाबेस + बिज़नेस लॉजिक + HTTP रूट्स। ये unit-टेस्ट से धीमे होते हैं, लेकिन सिस्टम की सटीकता में अधिक विश्वास देते हैं।
उपकरण: Supertest + Jest
Supertest आपको सर्वर को वास्तव में चलाए बिना अपने Express एप्लिकेशन पर HTTP अनुरोध करने की अनुमति देता है।
npm install --save-dev supertestउदाहरण: REST API का परीक्षण
मान लीजिए, एक सरल Express एप्लिकेशन app.js है:
const express = require('express');const app = express();app.use(express.json());
app.post('/users', (req, res) => { const { name, email } = req.body; if (!name || !email) { return res.status(400).json({ error: 'Missing fields' }); } // डेटाबेस में सहेजें (सरलीकृत) res.status(201).json({ id: 1, name, email });});
module.exports = app;इंटीग्रेशन टेस्ट users.test.js:
const request = require('supertest');const app = require('./app');
describe('POST /users', () => { test('creates user with valid data', async () => { const response = await request(app) .post('/users') .send({ name: 'Alice', email: 'alice@test.com' }); expect(response.status).toBe(201); expect(response.body).toHaveProperty('id'); expect(response.body.name).toBe('Alice'); });
test('returns 400 for missing email', async () => { const response = await request(app) .post('/users') .send({ name: 'Bob' });