KoaJS এর Testing এবং Debugging

কোআজেএস (KoaJS) - Web Development

235

Testing এবং Debugging ওয়েব অ্যাপ্লিকেশনের ডেভেলপমেন্ট এবং রক্ষণাবেক্ষণের গুরুত্বপূর্ণ অংশ। KoaJS একটি লঘু এবং নমনীয় ফ্রেমওয়ার্ক, যা অত্যন্ত কাস্টমাইজেবল হওয়ায় তার টেস্টিং এবং ডিবাগিং কিছুটা চ্যালেঞ্জিং হতে পারে। তবে, কিছু নির্দিষ্ট টুলস এবং টেকনিক ব্যবহার করে আপনি সহজে KoaJS অ্যাপ্লিকেশন টেস্ট এবং ডিবাগ করতে পারেন।

এই টিউটোরিয়ালে, আমরা দেখব কিভাবে KoaJS অ্যাপ্লিকেশন টেস্ট করা যায় এবং Debugging করা যায়।


১. KoaJS Testing

KoaJS অ্যাপ্লিকেশনের টেস্টিং করার জন্য বেশ কয়েকটি টেস্টিং ফ্রেমওয়ার্ক এবং টুলস ব্যবহার করা যেতে পারে। এর মধ্যে Mocha, Chai, এবং Supertest অত্যন্ত জনপ্রিয়। আমরা এখানে Mocha এবং Supertest ব্যবহার করে KoaJS অ্যাপ্লিকেশন টেস্ট করার উদাহরণ দেখব।

১.১. Mocha এবং Chai ইনস্টল করা

Mocha একটি টেস্টিং ফ্রেমওয়ার্ক এবং Chai একটি assertion লাইব্রেরি। Supertest HTTP রিকোয়েস্ট টেস্ট করতে ব্যবহৃত হয়।

npm install mocha chai supertest --save-dev

১.২. KoaJS অ্যাপ্লিকেশন টেস্ট করা

এখন, আমরা KoaJS অ্যাপ্লিকেশনটির জন্য একটি সিম্পল টেস্ট তৈরি করব। এই টেস্টে, আমরা /users রাউটটিকে টেস্ট করব।

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;

এখন, আমরা Mocha এবং Supertest ব্যবহার করে /users রাউটের টেস্ট তৈরি করব।

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' }]);
  });
});

ব্যাখ্যা:

  • request(app.callback()): supertest এর মাধ্যমে KoaJS অ্যাপ্লিকেশনকে টেস্ট করা হচ্ছে।
  • expect(): Chai assertion লাইব্রেরি ব্যবহার করে আমরা API রেসপন্সের স্ট্যাটাস এবং বডি যাচাই করছি।

১.৩. Mocha টেস্ট রান করা

npx mocha

এটি Mocha টেস্ট রান করবে এবং আপনি কনসোল থেকে ফলাফল দেখতে পারবেন।


২. KoaJS Debugging

KoaJS অ্যাপ্লিকেশন ডিবাগ করতে বেশ কিছু টুল এবং পদ্ধতি ব্যবহার করা যেতে পারে। এখানে আমরা Node.js Inspector, console.log(), এবং Koa Debugging Middleware ব্যবহার করে ডিবাগিং এর কিছু পদ্ধতি দেখব।

২.১. Node.js Inspector ব্যবহার করা

Node.js এর built-in Inspector ব্যবহার করে আপনি অ্যাপ্লিকেশনটি ডিবাগ করতে পারেন। এটি V8 ডিবাগিং প্রটোকল ব্যবহার করে এবং Chrome DevTools এর মাধ্যমে ডিবাগ করা যায়।

২.১.১. Node.js Inspector চালু করা
node --inspect-brk app.js

এখানে --inspect-brk ব্যবহার করলে কোড স্টার্ট হওয়ার আগেই ব্রেকপয়েন্টে থেমে যাবে।

  • Chrome ব্রাউজারে গিয়ে chrome://inspect টাইপ করুন এবং আপনার Node.js প্রক্রিয়া ডিবাগ করুন।

২.২. console.log() ব্যবহার করা

ডিবাগিংয়ের জন্য আপনি সাধারণভাবে console.log() ব্যবহার করতে পারেন।

router.get('/users', async (ctx) => {
  console.log('Request received at /users');
  ctx.body = [{ id: 1, name: 'John Doe' }];
});

এখানে console.log() ব্যবহার করে আপনি সহজে রিকোয়েস্টের মাধ্যমে ডেটা ট্র্যাক করতে পারবেন।

২.৩. Koa Debugging Middleware

KoaJS-এ ডিবাগিং করার জন্য koa-logger মিডলওয়্যার ব্যবহার করা যেতে পারে, যা রিকোয়েস্ট এবং রেসপন্স লগ করে।

npm install koa-logger
const logger = require('koa-logger');
app.use(logger());

এটি HTTP রিকোয়েস্টের প্রতিটি ডিটেইল লগ করে যেমন HTTP মেথড, পাথ, রেসপন্স কোড, রিকোয়েস্ট টাইম ইত্যাদি।

২.৪. Koa Error Handling for Debugging

KoaJS ত্রুটি হ্যান্ডলিং সিস্টেমের মাধ্যমে আপনি ত্রুটি ডিবাগ করতে পারেন। যখন কোনো ত্রুটি হয়, তখন আপনি ত্রুটির স্ট্যাক ট্রেস লগ করতে পারেন।

app.use(async (ctx, next) => {
  try {
    await next();
  } catch (err) {
    console.error('Error occurred:', err.stack);  // ত্রুটি লগ করা
    ctx.status = err.status || 500;
    ctx.body = { message: 'Internal Server Error' };
  }
});

এখানে, আমরা যদি কোনো ত্রুটি পাই, তবে সেটি console.error() দিয়ে লগ করা হচ্ছে।


৩. Additional Debugging Tools

KoaJS ডিবাগিং আরও সহজ করতে কিছু অতিরিক্ত টুলও ব্যবহার করা যেতে পারে:

  • node-inspect: Node.js এর built-in debugging টুল যা কোড থামিয়ে ডিবাগ করতে সাহায্য করে।
  • winston: শক্তিশালী লোগিং লাইব্রেরি যা উন্নত লগিং এবং ডিবাগিং সক্ষম করে।
  • debug: একটি ছোট লাইব্রেরি যা ডিবাগ মেসেজ ফিল্টার এবং কন্ডিশনাল লোগিংয়ের সুবিধা দেয়।

৩.১. debug লাইব্রেরি ইনস্টল করা

npm install debug
const debug = require('debug')('app:startup');
debug('Koa app started successfully');

এখানে debug() ফাংশন ব্যবহার করে আপনি শুধুমাত্র নির্দিষ্ট অংশে লোগিং করতে পারবেন, যা ডিবাগিং প্রক্রিয়াকে আরও সহজ করবে।


সারাংশ

KoaJS Testing এবং Debugging অত্যন্ত গুরুত্বপূর্ণ, এবং আপনি Mocha, Chai, এবং Supertest এর মাধ্যমে KoaJS অ্যাপ্লিকেশন টেস্ট করতে পারেন। Debugging করার জন্য আপনি Node.js Inspector, console.log(), koa-logger, এবং debug লাইব্রেরি ব্যবহার করতে পারেন। KoaJS অ্যাপ্লিকেশনের উন্নয়ন এবং রক্ষণাবেক্ষণে এই টুলগুলো সাহায্য করবে এবং দ্রুত ত্রুটি খুঁজে বের করার ক্ষমতা প্রদান করবে।

Content added By

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 TestIntegration 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 টুল ব্যবহার করে আপনি টেস্টের কভারেজ নিশ্চিত করতে পারেন, যা কোডের কার্যকারিতা এবং ভুল সনাক্তকরণে সহায়ক।

Content added By

Mocha এবং Chai হল দুটি জনপ্রিয় টেস্টিং লাইব্রেরি যা Node.js অ্যাপ্লিকেশন টেস্টিংয়ের জন্য ব্যবহৃত হয়। Mocha হল একটি টেস্ট ফ্রেমওয়ার্ক এবং Chai হল একটি assertion লাইব্রেরি যা টেস্টের ফলাফল যাচাই করতে ব্যবহৃত হয়। KoaJS অ্যাপ্লিকেশনগুলোর জন্য এই দুটি টুল ব্যবহার করে আপনি সহজে unit test, integration test, এবং functional test করতে পারেন।

এই টিউটোরিয়ালে, আমরা দেখব কিভাবে Mocha এবং Chai ব্যবহার করে KoaJS অ্যাপ্লিকেশন টেস্ট করা যায়।


১. Mocha এবং Chai ইনস্টল করা

প্রথমে Mocha এবং Chai প্যাকেজগুলো ইনস্টল করতে হবে।

npm install mocha chai supertest --save-dev
  • Mocha: টেস্ট ফ্রেমওয়ার্ক
  • Chai: assertion লাইব্রেরি
  • Supertest: HTTP assertions এবং API টেস্টিংয়ের জন্য ব্যবহৃত হয় (KoaJS অ্যাপ্লিকেশনের জন্য HTTP রিকোয়েস্ট পাঠানোর জন্য)

২. KoaJS অ্যাপ্লিকেশন তৈরি করা

এখন, একটি সাধারণ KoaJS অ্যাপ্লিকেশন তৈরি করা যাক, যার জন্য আমরা টেস্ট লিখব।

const Koa = require('koa');
const Router = require('koa-router');

const app = new Koa();
const router = new Router();

router.get('/hello', async (ctx) => {
  ctx.body = { message: 'Hello, World!' };
});

app.use(router.routes()).use(router.allowedMethods());

app.listen(3000, () => {
  console.log('Server running on http://localhost:3000');
});

module.exports = app;  // অ্যাপ্লিকেশনকে এক্সপোর্ট করা

এখানে, আমরা একটি /hello রাউট তৈরি করেছি, যা { message: 'Hello, World!' } রিটার্ন করে।


৩. Mocha এবং Chai দিয়ে KoaJS অ্যাপ্লিকেশন টেস্ট করা

এখন, Mocha এবং Chai ব্যবহার করে KoaJS অ্যাপ্লিকেশনটির টেস্ট লিখব।

৩.১. Mocha টেস্ট কনফিগারেশন

টেস্ট ফাইল তৈরি করার জন্য সাধারণত test নামক একটি ডিরেক্টরি তৈরি করা হয় এবং সেখানে টেস্ট ফাইল রাখা হয়। উদাহরণস্বরূপ, test/app.test.js ফাইলটি তৈরি করা যেতে পারে।

const chai = require('chai');
const chaiHttp = require('chai-http');
const app = require('../app');  // KoaJS অ্যাপ্লিকেশন ইম্পোর্ট করা

chai.use(chaiHttp);

const { expect } = chai;

describe('KoaJS App', () => {
  it('should return "Hello, World!" on /hello GET route', (done) => {
    chai.request(app)
      .get('/hello')  // /hello রাউটে GET রিকোয়েস্ট পাঠানো
      .end((err, res) => {
        expect(res).to.have.status(200);  // রেসপন্স স্ট্যাটাস কোড 200 হওয়া উচিত
        expect(res.body).to.have.property('message').equal('Hello, World!');  // রেসপন্স বডি তে message থাকাটা নিশ্চিত করা
        done();
      });
  });
});

ব্যাখ্যা:

  • chai.request(app).get('/hello'): এই লাইনটি /hello রাউটে GET রিকোয়েস্ট পাঠাচ্ছে।
  • expect(res).to.have.status(200): রেসপন্সের স্ট্যাটাস কোড 200 হওয়া উচিত।
  • expect(res.body).to.have.property('message').equal('Hello, World!'): রেসপন্সের বডিতে message প্রপার্টি থাকতে হবে এবং তার মান 'Hello, World!' হওয়া উচিত।
  • done(): Mocha তে অ্যাসিনক্রোনাস টেস্টে done() কল করতে হয় যাতে টেস্টটি শেষ হওয়ার পর রিপোর্ট করা যায়।

৪. Mocha টেস্ট চালানো

এখন Mocha ব্যবহার করে টেস্ট চালানো যাবে। নিচের কমান্ডটি ব্যবহার করে Mocha টেস্ট রান করুন:

npx mocha test/app.test.js

এই কমান্ডটি test/app.test.js ফাইলটিতে লেখা টেস্ট চালাবে।

আউটপুট উদাহরণ:

  KoaJS App
    ✓ should return "Hello, World!" on /hello GET route


  1 passing (12ms)

এখানে, 1 passing দেখাচ্ছে যে টেস্ট সফলভাবে সম্পন্ন হয়েছে।


৫. Supertest এর মাধ্যমে HTTP Testing

Supertest হল একটি লাইব্রেরি যা HTTP রিকোয়েস্ট পাঠানোর জন্য ব্যবহৃত হয়, বিশেষত API টেস্টিংয়ের জন্য। আপনি Supertest এর মাধ্যমে GET, POST, PUT, DELETE রিকোয়েস্ট পাঠিয়ে রেসপন্স চেক করতে পারেন।

৫.১. Supertest ব্যবহার করে টেস্ট লেখা

const request = require('supertest');
const app = require('../app');  // KoaJS অ্যাপ্লিকেশন ইম্পোর্ট করা

describe('KoaJS App with Supertest', () => {
  it('should return "Hello, World!" on /hello GET route', async () => {
    const res = await request(app).get('/hello');
    expect(res.status).toBe(200);  // রেসপন্স স্ট্যাটাস কোড 200 হওয়া উচিত
    expect(res.body.message).toBe('Hello, World!');  // রেসপন্স বডিতে message প্রপার্টি থাকতে হবে
  });
});

৫.২. Supertest টেস্ট চালানো

npx jest test/app.test.js

৬. Test Coverage (টেস্ট কাভারেজ)

Test Coverage হল একটি পরিমাপ যা জানায় আপনার টেস্ট সেট কতটুকু অ্যাপ্লিকেশন কোড কভার করেছে। আপনি nyc (Jest এর সাথে একত্রে ব্যবহৃত হয়) ব্যবহার করে টেস্ট কাভারেজ বের করতে পারেন।

৬.১. nyc ইনস্টল করা

npm install --save-dev nyc

৬.২. nyc কনফিগারেশন

package.json ফাইলে nyc কনফিগার করতে হবে:

"scripts": {
  "test": "nyc mocha"
}

এখন npm test কমান্ড ব্যবহার করে টেস্ট কাভারেজ দেখতে পারবেন।


সারাংশ

Mocha এবং Chai ব্যবহার করে KoaJS অ্যাপ্লিকেশন টেস্ট করা খুবই সহজ। Supertest লাইব্রেরি ব্যবহার করে আপনি HTTP রিকোয়েস্ট পাঠিয়ে API টেস্ট করতে পারেন। Mocha টেস্ট ফ্রেমওয়ার্ক এবং Chai assertion লাইব্রেরি কাস্টম টেস্ট স্ক্রিপ্ট তৈরি করতে সাহায্য করে এবং টেস্ট ফলাফল যাচাই করার জন্য শক্তিশালী পদ্ধতি প্রদান করে। Test Coverage টুলস ব্যবহার করে আপনি নিশ্চিত করতে পারবেন যে আপনার টেস্ট আপনার কোডের সব অংশ কভার করছে।

Content added By

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;  // টেস্টিংয়ের জন্য অ্যাপকে এক্সপোর্ট করা

এখানে, আমরা দুটি রাউট তৈরি করেছি:

  1. GET /hello: একটি সিম্পল GET রাউট, যা Hello, world! মেসেজ রিটার্ন করবে।
  2. 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 সঠিকভাবে কাজ করছে এবং ত্রুটি হ্যান্ডলিং সঠিকভাবে কার্যকর হচ্ছে।

Content added By

Debugging হল ডেভেলপমেন্ট প্রক্রিয়ার একটি গুরুত্বপূর্ণ অংশ, যা আপনাকে কোডে ত্রুটি বা সমস্যা চিহ্নিত এবং সমাধান করতে সাহায্য করে। KoaJS-এ ডিবাগিং এর জন্য বিভিন্ন টেকনিক এবং টুলস রয়েছে, যা আপনার অ্যাপ্লিকেশনটিকে আরও দক্ষভাবে ডিবাগ করতে সহায়তা করবে। এখানে আমরা KoaJS-এ ডিবাগিং টেকনিক এবং টুলস সম্পর্কে বিস্তারিত আলোচনা করব।


১. Console.log() এবং Custom Logging

Console.log() হল সবচেয়ে সাধারণ এবং সরল ডিবাগিং টেকনিক। এটি সাধারণত কোডের মধ্যবর্তী স্থানগুলোতে ভ্যালু পরীক্ষা করার জন্য ব্যবহার করা হয়। তবে এটি ছোট অ্যাপ্লিকেশনের জন্য কার্যকর হলেও বড় বা প্রোডাকশন কোডে এটি যথেষ্ট নয়।

১.১. console.log() ব্যবহার করা

const Koa = require('koa');
const Router = require('koa-router');
const app = new Koa();
const router = new Router();

router.get('/', async (ctx) => {
  console.log('Request received at / endpoint');  // Request এর সময় লগ করা
  ctx.body = 'Hello, KoaJS!';
});

app.use(router.routes()).use(router.allowedMethods());

app.listen(3000, () => {
  console.log('Server running on http://localhost:3000');
});

এখানে, আমরা console.log() ব্যবহার করে / রাউট এ যখন রিকোয়েস্ট আসবে, তখন তা লগ করতে পারি।

১.২. Custom Logging

তবে যদি আপনি আরও উন্নত লগিং চান, যেখানে আপনি লগ ফাইল বা অন্যান্য আউটপুট স্ট্রিমে ডেটা পাঠাতে চান, তাহলে winston বা koa-logger ব্যবহার করা উচিত।

npm install koa-logger
const Koa = require('koa');
const Router = require('koa-router');
const logger = require('koa-logger');  // koa-logger ইনস্টল করা
const app = new Koa();
const router = new Router();

app.use(logger());  // koa-logger মিডলওয়্যার ব্যবহার করা

router.get('/', async (ctx) => {
  ctx.body = 'Hello, KoaJS with custom logging!';
});

app.use(router.routes()).use(router.allowedMethods());

app.listen(3000, () => {
  console.log('Server running on http://localhost:3000');
});

এখানে, koa-logger ব্যবহার করা হয়েছে যাতে সমস্ত HTTP রিকোয়েস্ট এবং রেসপন্স লগ করা যায়। এটি উন্নত এবং স্বয়ংক্রিয়ভাবে HTTP লোগিং প্রদান করে।


২. Node.js Inspector

Node.js এর নিজস্ব Inspector টুলের মাধ্যমে ডিবাগিং করা সম্ভব। এটি আপনি কনসোলের মাধ্যমে ডিবাগিং চালাতে পারেন এবং ব্রাউজারের ডেভেলপার টুলের মাধ্যমে কোড স্টেপ-বাই-স্টেপ বিশ্লেষণ করতে পারেন।

২.১. Node.js Inspector ব্যবহার করা

আপনি --inspect ফ্ল্যাগ ব্যবহার করে Node.js অ্যাপ্লিকেশন চালাতে পারেন, যা ডিবাগিং মোড চালু করবে:

node --inspect app.js

এখন আপনি Chrome DevTools বা অন্য যেকোনো ব্রাউজার থেকে ডিবাগার প্যানেলে গিয়ে কোড স্টেপ-বাই-স্টেপ ডিবাগ করতে পারেন।

  1. chrome://inspect এ যান।
  2. "Remote Targets" থেকে আপনার Node.js অ্যাপ্লিকেশন নির্বাচন করুন।
  3. ব্রাউজারে কোড স্টেপ-বাই-স্টেপ দেখুন এবং ডিবাগ করুন।

৩. Debugging with VSCode

Visual Studio Code (VSCode) হল একটি অত্যন্ত শক্তিশালী কোড এডিটর, যা বিল্ট-ইন ডিবাগিং সাপোর্ট প্রদান করে। আপনি KoaJS অ্যাপ্লিকেশন ডিবাগ করার জন্য VSCode ব্যবহার করতে পারেন।

৩.১. VSCode Debugger কনফিগারেশন

  1. প্রথমে, আপনার VSCodelaunch.json ফাইল তৈরি করুন (Debugging Configurations)।
  2. launch.json ফাইলের মধ্যে ডিবাগ কনফিগারেশন যোগ করুন:
{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "Launch Program",
      "skipFiles": ["<node_internals>/**"],
      "program": "${workspaceFolder}/app.js"
    }
  ]
}
  1. এখন, আপনি F5 চাপিয়ে KoaJS অ্যাপ্লিকেশনটি ডিবাগ করতে পারবেন এবং VSCode ডিবাগ প্যানেল থেকে স্টেপ-বাই-স্টেপ এক্সিকিউশন দেখতে পারবেন।

৩.২. Breakpoints সেট করা

VSCode ডিবাগার প্যানেলে আপনি কোডের যে লাইনে ডিবাগ করতে চান সেখানে ব্রেকপয়েন্ট (ব্রেক করে এক্সিকিউশন থামানো) সেট করতে পারেন।


৪. Using node --inspect-brk

কখনও কখনও আপনাকে কোডের এক্সিকিউশন থামিয়ে ডিবাগিং শুরু করতে হতে পারে। এ জন্য আপনি --inspect-brk ফ্ল্যাগ ব্যবহার করতে পারেন, যা কোড চালু হওয়ার সাথে সাথে প্রথম লাইনেই থামিয়ে দেবে।

node --inspect-brk app.js

এটি প্রথম লাইনেই এক্সিকিউশন থামিয়ে দেবে, যাতে আপনি ডিবাগিং শুরু করতে পারেন।


৫. Error Handling and Stack Traces

KoaJS-এ ত্রুটি হ্যান্ডলিং করতে আপনি সাধারণভাবে try-catch ব্লক ব্যবহার করতে পারেন অথবা একটি কেন্দ্রীয় Error Handling Middleware তৈরি করতে পারেন যা সমস্ত ত্রুটিকে ক্যাচ করে এবং উপযুক্ত রেসপন্স পাঠায়।

৫.১. Error Handling Middleware

const Koa = require('koa');
const Router = require('koa-router');
const app = new Koa();
const router = new Router();

// Error Handling Middleware
app.use(async (ctx, next) => {
  try {
    await next();  // পরবর্তী মিডলওয়্যার কল করা
  } catch (err) {
    console.error('Error:', err);  // ত্রুটি লগ করা
    ctx.status = err.status || 500;
    ctx.body = { message: err.message };
  }
});

router.get('/', async (ctx) => {
  throw new Error('Something went wrong!');
});

app.use(router.routes()).use(router.allowedMethods());

app.listen(3000, () => {
  console.log('Server running on http://localhost:3000');
});

এখানে, Error Handling Middleware ব্যবহৃত হয়েছে যা সমস্ত ত্রুটিকে ক্যাচ করে এবং উপযুক্ত স্ট্যাটাস কোড সহ রেসপন্স পাঠায়।

৫.২. Stack Traces

যখন একটি ত্রুটি ঘটে, Node.js ডিফল্টভাবে ত্রুটির স্ট্যাক ট্রেস সহ বিস্তারিত তথ্য প্রদান করে, যা ডেভেলপারদের ত্রুটি সনাক্ত করতে সাহায্য করে। আপনি console.error(err.stack) ব্যবহার করে সেগুলো আরও স্পষ্টভাবে দেখতে পারেন।


সারাংশ

KoaJS-এ ডিবাগিং প্রক্রিয়া অত্যন্ত গুরুত্বপূর্ণ এবং এতে Console.log, VSCode Debugger, Node.js Inspector, এবং Custom Error Handling মিডলওয়্যার ব্যবহৃত হতে পারে। আপনি winston বা koa-logger মতো উন্নত লগিং টুলস ব্যবহার করে ডিবাগিং কার্যক্রমকে আরও দক্ষ করতে পারেন। এর মাধ্যমে আপনি KoaJS অ্যাপ্লিকেশনের সমস্যাগুলি দ্রুত চিহ্নিত এবং সমাধান করতে পারবেন, এবং কোডের কার্যকারিতা ও নিরাপত্তা নিশ্চিত করতে পারবেন।

Content added By
Promotion

Are you sure to start over?

Loading...