Unit Testing এবং Integration Testing দুটি গুরুত্বপূর্ণ প্রক্রিয়া যা সফটওয়্যার ডেভেলপমেন্টের অংশ হিসেবে কোডের কার্যকারিতা নিশ্চিত করতে সাহায্য করে। KoaJS অ্যাপ্লিকেশনগুলির জন্য টেস্টিং তৈরি করার জন্য বিভিন্ন টেস্টিং ফ্রেমওয়ার্ক এবং লাইব্রেরি ব্যবহার করা হয়, যেমন Mocha, Chai, এবং Supertest।
এই টিউটোরিয়ালে, আমরা দেখব কিভাবে KoaJS অ্যাপ্লিকেশনগুলির জন্য Unit Test এবং Integration Test তৈরি করা যায়।
১. Unit Testing
Unit Testing হল ছোট ছোট কোড ইউনিটের (ফাংশন বা মেথড) জন্য টেস্ট তৈরি করা, যাতে কোডের প্রতিটি ইউনিট সঠিকভাবে কাজ করছে কিনা তা নিশ্চিত করা যায়। KoaJS-এ, আমরা Mocha এবং Chai ব্যবহার করে ইউনিট টেস্ট তৈরি করতে পারি।
১.১. Mocha এবং Chai ইনস্টল করা
npm install mocha chai
- Mocha: টেস্ট রানার।
- Chai: অ্যাসারশন লাইব্রেরি যা আমাদের টেস্টে আসারশন বা যাচাই করতে সাহায্য করে।
১.২. Unit Test উদাহরণ (KoaJS)
ধরা যাক, আমাদের একটি সিম্পল ফাংশন রয়েছে যা দুটি সংখ্যার যোগফল বের করে।
// sum.js
function sum(a, b) {
return a + b;
}
module.exports = sum;
এখন আমরা Mocha এবং Chai ব্যবহার করে এই ফাংশনের জন্য ইউনিট টেস্ট তৈরি করব।
// test/sum.test.js
const chai = require('chai');
const expect = chai.expect;
const sum = require('../sum');
describe('sum function', () => {
it('should return 5 when adding 2 and 3', () => {
const result = sum(2, 3);
expect(result).to.equal(5);
});
it('should return -1 when adding -3 and 2', () => {
const result = sum(-3, 2);
expect(result).to.equal(-1);
});
});
১.৩. Unit Test রান করা
npx mocha test/sum.test.js
আউটপুট:
sum function
✓ should return 5 when adding 2 and 3
✓ should return -1 when adding -3 and 2
2 passing (12ms)
এখানে, আমরা sum ফাংশনের জন্য দুটি টেস্ট তৈরি করেছি:
- প্রথমটি চেক করে যে ২ এবং ৩ যোগ করলে ৫ হয় কিনা।
- দ্বিতীয়টি চেক করে যে -৩ এবং ২ যোগ করলে -১ হয় কিনা।
২. Integration Testing
Integration Testing হল একাধিক কোড ইউনিট বা সিস্টেম অংশ একত্রে কাজ করছে কিনা তা পরীক্ষা করা। এটি সাধারণত একাধিক মডিউল বা সার্ভিসের মধ্যে ইন্টারঅ্যাকশন পরীক্ষা করতে ব্যবহৃত হয়। KoaJS-এ Integration Testing করার জন্য আমরা Supertest ব্যবহার করি, যা HTTP রিকোয়েস্ট মডেল করে এবং সার্ভারের সাথে ইন্টিগ্রেশন টেস্ট করতে সাহায্য করে।
২.১. Supertest ইনস্টল করা
npm install supertest
২.২. Integration Test উদাহরণ (KoaJS)
ধরা যাক, আমাদের একটি KoaJS অ্যাপ্লিকেশন আছে যা একটি GET /users রাউট প্রদান করে। আমরা এই রাউটের জন্য Integration Test তৈরি করব।
// app.js
const Koa = require('koa');
const Router = require('koa-router');
const app = new Koa();
const router = new Router();
router.get('/users', async (ctx) => {
ctx.body = [{ id: 1, name: 'John Doe' }];
});
app.use(router.routes()).use(router.allowedMethods());
module.exports = app;
এখন আমরা Supertest ব্যবহার করে /users রাউটের জন্য Integration Test তৈরি করব।
// test/app.test.js
const request = require('supertest');
const app = require('../app');
describe('GET /users', () => {
it('should return a list of users', async () => {
const response = await request(app.callback()).get('/users');
expect(response.status).toBe(200);
expect(response.body).toEqual([{ id: 1, name: 'John Doe' }]);
});
});
২.৩. Integration Test রান করা
npx mocha test/app.test.js
আউটপুট:
GET /users
✓ should return a list of users
1 passing (8ms)
এখানে, আমরা /users রাউটের জন্য একটি Integration Test তৈরি করেছি যা:
GET /usersরিকোয়েস্ট পাঠায়।- স্ট্যাটাস কোড এবং রেসপন্স বডি যাচাই করে নিশ্চিত হয় যে সার্ভার সঠিকভাবে রেসপন্স দিচ্ছে।
৩. Unit Test এবং Integration Test এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | Unit Test | Integration Test |
|---|---|---|
| ফোকাস | একক ফাংশন বা মেথড পরীক্ষা | একাধিক ফাংশন বা সিস্টেমের ইন্টারঅ্যাকশন পরীক্ষা |
| ব্যবহার | ছোট ছোট ইউনিটের ফাংশনালিটি পরীক্ষা | বিভিন্ন কোড ইউনিটের একত্রে কাজ করা পরীক্ষা |
| টেস্টিং | সাধারণত মক বা স্টাব ব্যবহার | প্রকৃত সার্ভার বা সার্ভিসে রিকোয়েস্ট পাঠানো |
| পারফরম্যান্স | দ্রুত এবং ছোট | বেশি সময় নিতে পারে কারণ একাধিক মডিউল পরীক্ষা করা হয় |
৪. Test Coverage
Test Coverage হল একটি কোড মেট্রিক যা পরিমাপ করে কতটুকু কোড টেস্ট করা হয়েছে। আপনি KoaJS অ্যাপ্লিকেশনগুলির জন্য nyc অথবা jest এর মাধ্যমে কোড কভারেজ দেখতে পারেন।
৪.১. nyc ইনস্টল করা
npm install --save-dev nyc
৪.২. nyc কনফিগারেশন এবং টেস্ট রান করা
npx nyc mocha
এই কমান্ডটি রান করলে আপনি দেখতে পারবেন কোডের কতটুকু অংশ টেস্ট করা হয়েছে এবং তা কিভাবে কভারেজ মানে পরিণত হয়েছে।
সারাংশ
KoaJS-এ Unit Testing এবং Integration Testing তৈরি করা সহজ এবং কার্যকর। Mocha এবং Chai ব্যবহার করে ইউনিট টেস্ট এবং Supertest ব্যবহার করে ইন্টিগ্রেশন টেস্ট তৈরি করা যেতে পারে। Unit Test কোডের প্রতিটি ইউনিট পরীক্ষা করে, যখন Integration Test একাধিক ইউনিটের পারস্পরিক কাজ পরীক্ষা করে। Test Coverage টুল ব্যবহার করে আপনি টেস্টের কভারেজ নিশ্চিত করতে পারেন, যা কোডের কার্যকারিতা এবং ভুল সনাক্তকরণে সহায়ক।
Read more