Supertest হল একটি JavaScript লাইব্রেরি যা Node.js অ্যাপ্লিকেশনগুলির জন্য HTTP assertions এবং API টেস্টিং পরিচালনা করতে ব্যবহৃত হয়। এটি ExpressJS অ্যাপ্লিকেশনগুলির জন্য অত্যন্ত উপকারী, কারণ এটি সহজে HTTP রিকোয়েস্ট পাঠাতে এবং তাদের রেসপন্স পরীক্ষা করতে সক্ষম। Supertest সাধারণত Jest বা Mocha এর সাথে একত্রে ব্যবহৃত হয়, যাতে অ্যাপ্লিকেশনের API সঠিকভাবে কাজ করছে কিনা তা নিশ্চিত করা যায়।
এই গাইডে, আমরা ExpressJS অ্যাপ্লিকেশনে Supertest ব্যবহার করে API টেস্টিং কিভাবে করা যায় তা দেখাব।
১. Supertest কি এবং কেন ব্যবহার করবেন?
Supertest একটি অত্যন্ত জনপ্রিয় লাইব্রেরি যা HTTP রিকোয়েস্ট পাঠানোর জন্য ব্যবহৃত হয়। এটি সাধারণত API টেস্টিংয়ে ব্যবহার হয়, কারণ এটি সহজে HTTP রিকোয়েস্ট পাঠিয়ে সার্ভারের রেসপন্স পরীক্ষা করতে সাহায্য করে। Supertest দিয়ে আপনি HTTP মেথড (GET, POST, PUT, DELETE) পরীক্ষা করতে পারেন, রেসপন্স স্ট্যাটাস কোড, রেসপন্স বডি, হেডার ইত্যাদি যাচাই করতে পারেন।
২. Supertest ইনস্টলেশন
প্রথমে, Supertest এবং Mocha (বা যে কোনো টেস্টিং ফ্রেমওয়ার্ক) ইনস্টল করতে হবে।
npm install --save-dev supertest mocha
supertest: API টেস্টিংয়ের জন্য।mocha: টেস্ট রানার হিসাবে।
৩. ExpressJS অ্যাপ্লিকেশন তৈরি করা
আমরা একটি সিম্পল ExpressJS অ্যাপ্লিকেশন তৈরি করব এবং তাতে API রাউট যোগ করব, যা আমরা Supertest দিয়ে টেস্ট করব।
app.js (Express অ্যাপ্লিকেশন)
const express = require('express');
const app = express();
const port = 3000;
// স্ট্যাটিক JSON ডেটা
const users = [
{ id: 1, name: 'John Doe', email: 'john@example.com' },
{ id: 2, name: 'Jane Doe', email: 'jane@example.com' }
];
// GET রাউট: সমস্ত ইউজার পেতে
app.get('/users', (req, res) => {
res.status(200).json(users);
});
// GET রাউট: নির্দিষ্ট ইউজার পেতে (ID অনুযায়ী)
app.get('/users/:id', (req, res) => {
const user = users.find(u => u.id === parseInt(req.params.id));
if (!user) {
return res.status(404).json({ message: 'User not found' });
}
res.status(200).json(user);
});
// POST রাউট: নতুন ইউজার তৈরি করা
app.post('/users', express.json(), (req, res) => {
const { name, email } = req.body;
const newUser = { id: users.length + 1, name, email };
users.push(newUser);
res.status(201).json(newUser);
});
// PUT রাউট: ইউজার আপডেট করা
app.put('/users/:id', express.json(), (req, res) => {
const { name, email } = req.body;
const user = users.find(u => u.id === parseInt(req.params.id));
if (!user) {
return res.status(404).json({ message: 'User not found' });
}
user.name = name;
user.email = email;
res.status(200).json(user);
});
// DELETE রাউট: ইউজার মুছে ফেলা
app.delete('/users/:id', (req, res) => {
const userIndex = users.findIndex(u => u.id === parseInt(req.params.id));
if (userIndex === -1) {
return res.status(404).json({ message: 'User not found' });
}
users.splice(userIndex, 1);
res.status(204).send(); // 204: No Content
});
// সার্ভার শুরু
app.listen(port, () => {
console.log(`Server running at http://localhost:${port}`);
});
module.exports = app;
এখানে আমরা কিছু সাধারণ API রাউট তৈরি করেছি:
- GET
/users: সমস্ত ইউজার রিটার্ন করবে। - GET
/users/:id: নির্দিষ্ট ইউজার ID দিয়ে ডেটা রিটার্ন করবে। - POST
/users: নতুন ইউজার তৈরি করবে। - PUT
/users/:id: ইউজারের তথ্য আপডেট করবে। - DELETE
/users/:id: ইউজার মুছে ফেলবে।
৪. Supertest দিয়ে API টেস্টিং করা
এখন, Supertest দিয়ে আমরা API টেস্টিং শুরু করব। টেস্টগুলো চালানোর জন্য Mocha ব্যবহার করব।
test/api.test.js (টেস্ট ফাইল)
const request = require('supertest');
const app = require('../app'); // Express অ্যাপ্লিকেশন
describe('API Test', () => {
// GET /users রাউট টেস্ট
it('should return all users', async () => {
const response = await request(app).get('/users');
expect(response.status).toBe(200); // HTTP Status code check
expect(response.body).toHaveLength(2); // Users count check
expect(response.body[0].name).toBe('John Doe'); // First user name check
});
// GET /users/:id রাউট টেস্ট
it('should return a single user by ID', async () => {
const response = await request(app).get('/users/1');
expect(response.status).toBe(200);
expect(response.body.name).toBe('John Doe');
});
// POST /users রাউট টেস্ট
it('should create a new user', async () => {
const newUser = {
name: 'Alice',
email: 'alice@example.com'
};
const response = await request(app).post('/users').send(newUser);
expect(response.status).toBe(201);
expect(response.body.name).toBe('Alice');
expect(response.body.email).toBe('alice@example.com');
});
// PUT /users/:id রাউট টেস্ট
it('should update an existing user', async () => {
const updatedUser = {
name: 'John Updated',
email: 'john.updated@example.com'
};
const response = await request(app).put('/users/1').send(updatedUser);
expect(response.status).toBe(200);
expect(response.body.name).toBe('John Updated');
expect(response.body.email).toBe('john.updated@example.com');
});
// DELETE /users/:id রাউট টেস্ট
it('should delete a user', async () => {
const response = await request(app).delete('/users/2');
expect(response.status).toBe(204);
});
});
এখানে:
request(app): Express অ্যাপ্লিকেশন থেকে HTTP রিকোয়েস্ট পাঠানোর জন্য Supertest এরrequestফাংশন ব্যবহার করা হয়েছে।it(): Mocha এর টেস্ট কেস হিসেবে ব্যবহৃত ফাংশন, যেখানে প্রত্যাশিত আউটপুট দিয়ে রেসপন্স যাচাই করা হয়।expect(): রেসপন্স যাচাই করার জন্য ব্যবহার করা হয়, যেমন স্ট্যাটাস কোড, রেসপন্স বডি ইত্যাদি।
৫. টেস্ট চালানো
এখন, আমরা Mocha এর মাধ্যমে টেস্টগুলো চালাতে পারি।
npx mocha test/api.test.js
এই কমান্ডটি চালানোর পর আপনি টেস্টের ফলাফল দেখতে পারবেন।
Supertest একটি শক্তিশালী লাইব্রেরি যা ExpressJS অ্যাপ্লিকেশনগুলির জন্য API টেস্টিং করা সহজ করে তোলে। এটি HTTP রিকোয়েস্ট পাঠানোর জন্য ব্যবহৃত হয় এবং রেসপন্সে প্রাপ্ত ডেটা যাচাই করার জন্য অনেক সুবিধা প্রদান করে। Mocha এর সাথে ব্যবহার করলে আপনি সহজেই আপনার API এর কার্যকারিতা পরীক্ষা করতে পারেন।
এই গাইডে, আমরা দেখেছি কিভাবে ExpressJS অ্যাপ্লিকেশন তৈরি করা যায় এবং তার উপর Supertest দিয়ে API টেস্টিং করা যায়।
Read more