Supertest JavaScript (Node.js): पूर्ण गाइड उदाहरणों के साथ
PythonLib में आपका स्वागत है! इस लेख में हम Supertest लाइब्रेरी के बारे में विस्तार से जानेंगे — जो Node.js इकोसिस्टम में HTTP टेस्टिंग के लिए सबसे लोकप्रिय टूल्स में से एक है। यदि आप Express, Koa, Fastify या किसी अन्य फ्रेमवर्क पर वेब एप्लिकेशन डेवलप कर रहे हैं, तो Supertest आपके लिए मजबूत इंटीग्रेशन टेस्ट लिखने में बेहद मददगार साबित होगा।
1. यह क्या है और इसकी आवश्यकता क्यों है
Supertest Node.js में HTTP सर्वर टेस्ट करने के लिए एक हाई-लेवल लाइब्रेरी है। यह आपके एप्लिकेशन को HTTP रिक्वेस्ट भेजने और रिस्पॉन्स की जांच करने के लिए एक आसान और शक्तिशाली API प्रदान करती है। Supertest की सबसे बड़ी खासियत यह है कि यह सर्वर को वास्तविक पोर्ट पर चलाए बिना टेस्ट करने की अनुमति देती है — लाइब्रेरी Node.js के आंतरिक मैकेनिज्म का उपयोग करके HTTP कनेक्शन का अनुकरण करती है, जिससे टेस्ट तेज़ और आइसोलेटेड होते हैं।
Supertest की आवश्यकता क्यों है? आधुनिक वेब डेवलपमेंट में कोड की गुणवत्ता सर्वोपरि है। इंटीग्रेशन टेस्ट जो आपके API एंडपॉइंट्स की जांच करते हैं, रिग्रेशन, रिक्वेस्ट हैंडलिंग में त्रुटियां और डेटा वैलिडेशन की समस्याओं को पकड़ने में मदद करते हैं। Supertest आपको चेनिंग मेथड्स और बिल्ट-इन एसर्ट्स का उपयोग करके स्टेटस, हेडर, रिस्पॉन्स बॉडी और बहुत कुछ की जांच करने की सुविधा देता है। यह लाइब्रेरी Jest, Mocha, Jasmine और AVA जैसे लोकप्रिय टेस्ट रनर्स के साथ पूरी तरह से काम करती है।
इस लाइब्रेरी को TJ Holowaychuk (Express, Koa और कई अन्य प्रसिद्ध प्रोजेक्ट्स के निर्माता) ने बनाया था और तब से इसे समुदाय द्वारा बनाए रखा जा रहा है। Supertest SuperAgent लाइब्रेरी के ऊपर बनाई गई है — जो Node.js और ब्राउज़र के लिए एक शक्तिशाली HTTP क्लाइंट है। इसका मतलब है कि आपको SuperAgent की सभी क्षमताओं तक पहुंच मिलती है, जिसमें विभिन्न डेटा प्रकारों का समर्थन, फ़ाइल अपलोड, कुकीज़ के साथ काम करना और बहुत कुछ शामिल है।
2. इंस्टॉलेशन
Supertest को npm पैकेज मैनेजर के माध्यम से इंस्टॉल किया जाता है। इसे डेवलपमेंट डिपेंडेंसी (devDependency) के रूप में इंस्टॉल करने की सलाह दी जाती है, क्योंकि प्रोडक्शन एनवायरनमेंट में इसकी आवश्यकता नहीं होती है।
npm install --save-dev supertest
यदि आप yarn का उपयोग कर रहे हैं:
yarn add --dev supertest
TypeScript के साथ काम करने के लिए आपको टाइप्स इंस्टॉल करने की भी आवश्यकता हो सकती है:
npm install --save-dev @types/supertest
ध्यान दें कि Supertest के लिए Node.js संस्करण 14 या उससे ऊपर की आवश्यकता है। साथ ही, सुनिश्चित करें कि आपके पास एक टेस्ट रनर (जैसे Jest या Mocha) इंस्टॉल है।
3. त्वरित शुरुआत — न्यूनतम कार्यशील उदाहरण
चलिए एक सरल Express एप्लिकेशन बनाते हैं और Supertest का उपयोग करके इसके लिए एक टेस्ट लिखते हैं। यह उदाहरण लाइब्रेरी की बुनियादी कार्यप्रणाली को दिखाएगा।
पहले हम अपने एप्लिकेशन के लिए app.js फ़ाइल बनाएंगे:
// app.js
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.status(200).json({ message: 'Hello, World!' });
});
app.get('/user', (req, res) => {
res.status(200).json({ name: 'John Doe', age: 30 });
});
module.exports = app;
अब टेस्ट फ़ाइल app.test.js बनाते हैं:
// app.test.js
const request = require('supertest');
const app = require('./app');
describe('GET /', () => {
it('should return Hello, World!', async () => {
const response = await request(app)
.get('/')
.expect(200);
expect(response.body).toEqual({ message: 'Hello, World!' });
});
});
describe('GET /user', () => {
it('should return user data', async () => {
const response = await request(app)
.get('/user')
.expect('Content-Type', /json/)
.expect(200);
expect(response.body.name).toBe('John Doe');
expect(response.body.age).toBe(30);
});
});
अब आप टेस्ट चला सकते हैं:
npx jest app.test.js
यदि सब कुछ सही है, तो आपको दोनों टेस्ट पास होते दिखेंगे। यह Supertest का सबसे बुनियादी उपयोग है — आपने अपने Express एप्लिकेशन के दो एंडपॉइंट्स का सफलतापूर्वक परीक्षण किया है।
4. मुख्य तरीके और उनके उपयोग
Supertest कई शक्तिशाली तरीके प्रदान करता है जो HTTP टेस्टिंग को आसान बनाते हैं। आइए उनमें से कुछ सबसे महत्वपूर्ण तरीकों को विस्तार से देखें।
HTTP मेथड्स
Supertest सभी मानक HTTP मेथड्स को सपोर्ट करता है: .get(), .post(), .put(), .patch(), .delete(), .head(), और .options()।
// POST रिक्वेस्ट का उदाहरण
const response = await request(app)
.post('/api/users')
.send({ name: 'Jane Doe', email: 'jane@example.com' })
.expect(201);
रिस्पॉन्स की जांच
.expect() मेथड आपको रिस्पॉन्स के विभिन्न पहलुओं की जांच करने की अनुमति देता है:
// स्टेटस कोड की जांच
.expect(200)
// हेडर की जांच
.expect('Content-Type', 'application/json')
// बॉडी की जांच
.expect({ message: 'Success' })
// रेगुलर एक्सप्रेशन से जांच
.expect('Content-Type', /json/)
रिक्वेस्ट हेडर सेट करना
const response = await request(app)
.get('/api/protected')
.set('Authorization', 'Bearer token123')
.expect(200);
क्वेरी पैरामीटर
const response = await request(app)
.get('/api/search')
.query({ q: 'supertest', page: 1 })
.expect(200);
फ़ाइल अपलोड
const response = await request(app)
.post('/api/upload')
.attach('file', '/path/to/file.txt')
.expect(200);
5. Jest के साथ Supertest का उपयोग
Jest सबसे लोकप्रिय टेस्ट रनर है और Supertest के साथ यह एक शक्तिशाली संयोजन बनाता है। यहां एक अधिक उन्नत उदाहरण है:
// user.test.js
const request = require('supertest');
const app = require('./app');
describe('User API Tests', () => {
let userId;
test('POST /api/users - create a new user', async () => {
const response = await request(app)
.post('/api/users')
.send({ name: 'Alice', email: 'alice@test.com' })
.expect(201);
expect(response.body).toHaveProperty('id');
expect(response.body.name).toBe('Alice');
userId = response.body.id;
});
test('GET /api/users/:id - get user by ID', async () => {
const response = await request(app)
.get(`/api/users/${userId}`)
.expect(200);
expect(response.body.name).toBe('Alice');
});
test('PUT /api/users/:id - update user', async () => {
const response = await request(app)
.put(`/api/users/${userId}`)
.send({ name: 'Alice Updated' })
.expect(200);
expect(response.body.name).toBe('Alice Updated');
});
test('DELETE /api/users/:id - delete user', async () => {
await request(app)
.delete(`/api/users/${userId}`)
.expect(204);
});
});
6. सामान्य समस्याएं और समाधान
Supertest का उपयोग करते समय कुछ सामान्य समस्याएं हो सकती हैं। यहां उनके समाधान दिए गए हैं:
समस्या: टेस्ट हैंग हो जाते हैं या टाइमआउट हो जाते हैं
समाधान: सुनिश्चित करें कि आपका एप्लिकेशन सर्वर को लिसन नहीं कर रहा है। Supertest को सर्वर को लिसन करने की आवश्यकता नहीं है। यदि आपका app.js फ़ाइल app.listen() कॉल करता है, तो उसे हटा दें या कंडीशनल बनाएं:
// app.js
const app = express();
// ... रूट्स और मिडलवेयर
if (process.env.NODE_ENV !== 'test') {
app.listen(3000);
}
module.exports = app;
समस्या: डेटाबेस कनेक्शन की समस्या
समाधान: टेस्ट के लिए एक अलग डेटाबेस का उपयोग करें और प्रत्येक टेस्ट से पहले और बाद में डेटा को साफ करें। Jest में beforeEach और afterEach हुक्स का उपयोग करें।
समस्या: एसिंक्रोनस कोड को हैंडल करना
समाधान: हमेशा async/await का उपयोग करें या प्रॉमिस को रिटर्न करें। Supertest प्रॉमिस-आधारित है, इसलिए सुनिश्चित करें कि आप टेस्ट फंक्शन में async कीवर्ड का उपयोग कर रहे हैं।
7. निष्कर्ष
Supertest Node.js में HTTP टेस्टिंग के लिए एक अत्यंत शक्तिशाली और उपयोग में आसान लाइब्रेरी है। इस गाइड में हमने कवर किया:
- Supertest क्या है और इसकी आवश्यकता क्यों है
- इंस्टॉलेशन प्रक्रिया
- बुनियादी और उन्नत उदाहरण
- मुख्य तरीके और उनके उपयोग
- Jest के साथ एकीकरण
- सामान्य समस्याएं और समाधान
अब आप अपने Node.js एप्लिकेशन के लिए मजबूत और विश्वसनीय इंटीग्रेशन टेस्ट लिखने के लिए तैयार हैं। Supertest के साथ, आप यह सुनिश्चित कर सकते हैं कि आपके API एंडपॉइंट्स सही ढंग से काम कर रहे हैं और कोई भी बदलाव मौजूदा कार्यक्षमता को नहीं तोड़ रहा है।
यदि आपके कोई प्रश्न हैं या आप और अधिक जानना चाहते हैं, तो कृपया नीचे टिप्पणी करें। हैप्पी कोडिंग!