Supertest হল একটি জনপ্রিয় টুল যা HTTP রিকোয়েস্ট এবং রেসপন্স টেস্ট করতে ব্যবহৃত হয়। এটি Node.js-এ তৈরি ওয়েব অ্যাপ্লিকেশনগুলির API টেস্টিং করার জন্য অত্যন্ত কার্যকরী। KoaJS-এ Supertest ব্যবহার করে API রিকোয়েস্টের কার্যকারিতা পরীক্ষা করা যায়, যেমন GET, POST, PUT, DELETE ইত্যাদি রিকোয়েস্ট পাঠিয়ে রেসপন্সের মান যাচাই করা।
এই টিউটোরিয়ালে, আমরা দেখব কিভাবে Supertest দিয়ে KoaJS অ্যাপ্লিকেশনের API টেস্ট করা যায়।
১. Supertest ইনস্টল করা
প্রথমে, আপনার KoaJS অ্যাপ্লিকেশনে Supertest ইনস্টল করতে হবে।
npm install supertest --save-dev
--save-dev ব্যবহার করা হয়েছে কারণ এটি ডেভেলপমেন্ট টুল হিসেবে ব্যবহার করা হয়, প্রোডাকশন ডিপেন্ডেন্সি নয়।
২. Supertest এর সাথে API টেস্টিং করার উদাহরণ
ধরা যাক, আপনার একটি KoaJS অ্যাপ্লিকেশন রয়েছে, যেখানে একটি GET রাউট এবং একটি POST রাউট রয়েছে। আমরা Supertest ব্যবহার করে এই রাউটগুলির কার্যকারিতা পরীক্ষা করব।
২.১. KoaJS অ্যাপ্লিকেশন তৈরি করা
const Koa = require('koa');
const Router = require('koa-router');
const app = new Koa();
const router = new Router();
// GET রাউট
router.get('/hello', async (ctx) => {
ctx.body = { message: 'Hello, world!' };
});
// POST রাউট
router.post('/user', async (ctx) => {
const { name, age } = ctx.request.body;
ctx.body = { name, age };
ctx.status = 201; // রেসপন্স স্ট্যাটাস কোড 201 (Created)
});
// রাউট মাউন্ট করা
app.use(router.routes()).use(router.allowedMethods());
// অ্যাপ চালু করা
app.listen(3000, () => {
console.log('Server running on http://localhost:3000');
});
module.exports = app; // টেস্টিংয়ের জন্য অ্যাপকে এক্সপোর্ট করা
এখানে, আমরা দুটি রাউট তৈরি করেছি:
GET /hello: একটি সিম্পল GET রাউট, যাHello, world!মেসেজ রিটার্ন করবে।POST /user: একটি POST রাউট, যা ইউজারের নাম এবং বয়স গ্রহণ করবে এবং সেই অনুযায়ী রেসপন্স পাঠাবে।
২.২. Supertest ব্যবহার করে API টেস্টিং
এখন, আমরা Supertest ব্যবহার করে এই রাউটগুলির টেস্ট তৈরি করব।
const request = require('supertest');
const app = require('./app'); // KoaJS অ্যাপ্লিকেশন ইমপোর্ট করা
describe('KoaJS API Test', () => {
it('should return a message from GET /hello', async () => {
const response = await request(app.callback()) // Supertest রিকোয়েস্ট
.get('/hello') // GET রিকোয়েস্ট
.expect(200); // 200 OK স্ট্যাটাস কোড আশা করা হচ্ছে
expect(response.body.message).toBe('Hello, world!');
});
it('should create a user with POST /user', async () => {
const response = await request(app.callback()) // Supertest রিকোয়েস্ট
.post('/user') // POST রিকোয়েস্ট
.send({ name: 'John Doe', age: 30 }) // সঠিক ইনপুট পাঠানো
.expect(201); // 201 Created স্ট্যাটাস কোড আশা করা হচ্ছে
expect(response.body.name).toBe('John Doe');
expect(response.body.age).toBe(30);
});
});
ব্যাখ্যা:
request(app.callback()):Supertestএর মাধ্যমে KoaJS অ্যাপ্লিকেশনের রিকোয়েস্ট পাঠানো হচ্ছে।callback()ব্যবহার করে আমরা অ্যাপ্লিকেশনটি টেস্টিং এর জন্য প্রস্তুত করছি।expect(200)এবংexpect(201): প্রত্যাশিত HTTP স্ট্যাটাস কোড নির্ধারণ করা হচ্ছে। 200 মানে OK এবং 201 মানে Created।.send(): POST রিকোয়েস্টে ডেটা পাঠানোর জন্য ব্যবহৃত হচ্ছে। এখানে, ইউজারের নাম এবং বয়স পাঠানো হচ্ছে।
৩. Running the Tests (টেস্ট চালানো)
এখন, আপনি Jest বা Mocha ব্যবহার করে এই টেস্টগুলো চালাতে পারেন। যদি আপনি Jest ব্যবহার করছেন, তবে নিচের কমান্ডটি চালাতে হবে:
npx jest
অথবা, যদি Mocha ব্যবহার করেন:
npx mocha
এই কমান্ডগুলো আপনার টেস্টগুলো চালাবে এবং ফলাফল দেখাবে।
৪. Error Handling এবং Negative Tests
API টেস্টিংয়ে কেবলমাত্র সফল রেসপন্সেরই পরীক্ষা করা হয় না, ত্রুটি (error) এবং ভুল ইনপুট ক্ষেত্রেও টেস্ট করা উচিত।
৪.১. Negative Test Example (ত্রুটির টেস্ট)
it('should return a 400 error when invalid data is sent to POST /user', async () => {
const response = await request(app.callback())
.post('/user')
.send({ name: 'Jane Doe' }) // বয়স না দিয়ে সুধু নাম পাঠানো
.expect(400); // 400 Bad Request স্ট্যাটাস কোড আশা করা হচ্ছে
expect(response.body.message).toBe('Bad request'); // ত্রুটির বার্তা যাচাই
});
এখানে:
- আমরা এমন একটি POST রিকোয়েস্ট পাঠাচ্ছি যাতে age (বয়স) ফিল্ড অনুপস্থিত। আমরা আশা করছি যে সার্ভার একটি 400 Bad Request রেসপন্স ফেরত পাঠাবে।
সারাংশ
Supertest একটি শক্তিশালী টুল যা KoaJS-এ API টেস্টিং করার জন্য ব্যবহৃত হয়। এটি HTTP রিকোয়েস্ট পাঠাতে এবং রেসপন্স পরীক্ষা করতে সহায়ক। আপনি GET, POST, PUT, DELETE রিকোয়েস্টের টেস্ট করতে পারেন, এবং HTTP স্ট্যাটাস কোড, রেসপন্সের কন্টেন্ট এবং অন্যান্য বৈশিষ্ট্য যাচাই করতে পারেন। Negative tests এবং error handling টেস্ট করার মাধ্যমে আপনি নিশ্চিত করতে পারবেন যে আপনার API সঠিকভাবে কাজ করছে এবং ত্রুটি হ্যান্ডলিং সঠিকভাবে কার্যকর হচ্ছে।
Read more