Unit Testing হল একটি গুরুত্বপূর্ণ প্রক্রিয়া, যেখানে আপনার কোডের বিভিন্ন অংশ বা ফাংশন পরীক্ষা করা হয়, যাতে নিশ্চিত হওয়া যায় যে প্রতিটি ফাংশন প্রত্যাশিতভাবে কাজ করছে। Mocha এবং Chai হল জনপ্রিয় টেস্টিং লাইব্রেরি যা Node.js এর জন্য ইউনিট টেস্টিং করা সহজ করে তোলে। Mocha একটি টেস্ট ফ্রেমওয়ার্ক এবং Chai একটি Assertion লাইব্রেরি যা পরীক্ষার ফলাফল যাচাই করতে ব্যবহৃত হয়।
এখানে আমরা দেখব কিভাবে MeanJS অ্যাপ্লিকেশনে Mocha এবং Chai ব্যবহার করে Unit Testing করা যায়।
Mocha এবং Chai ইনস্টলেশন
প্রথমে, আপনাকে Mocha এবং Chai ইনস্টল করতে হবে।
- Mocha এবং Chai ইনস্টল করা:
npm install mocha chai --save-dev
- Supertest ইনস্টল করা (API টেস্টিং এর জন্য):
npm install supertest --save-dev
Supertest ব্যবহার করে HTTP রিকুয়েস্টের মাধ্যমে API টেস্ট করা যায়, যা Mocha এবং Chai এর সাথে একত্রে ব্যবহৃত হয়।
Mocha এবং Chai কনফিগারেশন
Mocha কনফিগারেশনের জন্য একটি টেস্ট ফোল্ডার তৈরি করতে পারেন যেখানে টেস্ট ফাইলগুলো রাখা হবে।
- test নামক একটি ফোল্ডার তৈরি করুন:
mkdir test
- test/example.test.js নামক একটি টেস্ট ফাইল তৈরি করুন এবং এতে টেস্ট কেস লিখুন:
// test/example.test.js
const assert = require('chai').assert;
describe('Basic Arithmetic Test', function() {
it('should return 4 when adding 2 + 2', function() {
let result = 2 + 2;
assert.equal(result, 4);
});
});
এখানে:
- describe() হল Mocha এর একটি ফাংশন যা একটি টেস্ট সুইটের মধ্যে টেস্ট কেস গ্রুপ করে।
- it() একটি টেস্ট কেস তৈরি করে যা একটি নির্দিষ্ট কাজ পরীক্ষা করে।
- assert.equal() হল Chai এর assertion ফাংশন যা যাচাই করে যে দুইটি মান সমান কিনা।
- Mocha টেস্ট রান করা:
npx mocha
এটি test/example.test.js ফাইলের টেস্ট কেস রান করবে এবং টেস্টের ফলাফল দেখাবে।
Node.js অ্যাপ্লিকেশনে Unit Testing
এখন, আমরা একটি সাধারণ Node.js অ্যাপ্লিকেশন তৈরি করে, সেটির ইউনিট টেস্টিং দেখব।
১. Express.js অ্যাপ্লিকেশন তৈরি করা
প্রথমে, একটি সাধারণ Express.js অ্যাপ্লিকেশন তৈরি করুন:
npm init -y
npm install express --save
এখন, একটি app.js ফাইল তৈরি করুন:
// app.js
const express = require('express');
const app = express();
app.get('/api/add', function(req, res) {
const num1 = parseInt(req.query.num1);
const num2 = parseInt(req.query.num2);
const sum = num1 + num2;
res.json({ result: sum });
});
module.exports = app;
এখানে, /api/add এ একটি GET রিকুয়েস্ট প্রক্রিয়া করা হয়েছে যা দুইটি নম্বর নিয়ে তাদের যোগফল রিটার্ন করে।
২. Unit Testing for API
এখন, আমরা Mocha, Chai এবং Supertest ব্যবহার করে এই API টেস্ট করব।
- Test API:
// test/app.test.js
const request = require('supertest');
const app = require('../app'); // আপনার Express অ্যাপ্লিকেশন ইমপোর্ট করা
const { expect } = require('chai');
describe('GET /api/add', function() {
it('should return sum of two numbers', function(done) {
request(app)
.get('/api/add?num1=5&num2=7')
.expect('Content-Type', /json/)
.expect(200)
.end(function(err, res) {
if (err) return done(err);
expect(res.body.result).to.equal(12); // যোগফল ১২ হওয়া উচিত
done();
});
});
});
এখানে:
- request(app) দিয়ে HTTP রিকুয়েস্ট পাঠানো হচ্ছে।
- .expect(200) দ্বারা HTTP রেসপন্স স্ট্যাটাস কোড চেক করা হচ্ছে।
- .end() ফাংশন দিয়ে রেসপন্স প্রাপ্তির পর Chai এর expect() ফাংশন দিয়ে ডেটার মান যাচাই করা হচ্ছে।
৩. Mocha দিয়ে টেস্ট রান করা
npx mocha test/app.test.js
এটি আপনার GET /api/add রুটটি পরীক্ষা করবে এবং নিশ্চিত করবে যে যোগফল সঠিকভাবে রিটার্ন হচ্ছে।
এখন কিছু আরেকটি গুরুত্বপূর্ণ টেস্টিং কৌশল
১. Async Functions এর জন্য Unit Testing
Async ফাংশনগুলোর জন্য টেস্ট লিখতে, done() ফাংশন ব্যবহার করা হয়। উদাহরণস্বরূপ:
// test/asyncTest.test.js
const { expect } = require('chai');
function asyncAdd(a, b) {
return new Promise((resolve) => {
setTimeout(() => resolve(a + b), 1000);
});
}
describe('Async Add Test', function() {
it('should return sum of two numbers after delay', function(done) {
asyncAdd(2, 3).then((result) => {
expect(result).to.equal(5);
done();
});
});
});
এখানে, asyncAdd() ফাংশনটি Promise রিটার্ন করে, এবং done() ফাংশন ব্যবহার করে টেস্টটি সম্পন্ন করা হচ্ছে।
২. Mocking Dependencies with Sinon
Sinon.js ব্যবহার করে আমরা অ্যাপ্লিকেশনের ডিপেনডেন্সি মক (mock) করতে পারি।
npm install sinon --save-dev
এখানে, একটি ডিপেনডেন্সি মক করার উদাহরণ দেওয়া হলো:
const sinon = require('sinon');
const { expect } = require('chai');
describe('Mocking Example', function() {
it('should mock a function', function() {
const obj = {
method: function() {
return 10;
}
};
const spy = sinon.spy(obj, 'method');
obj.method();
expect(spy.calledOnce).to.be.true; // নিশ্চিত করে যে method() একবার কল হয়েছে
});
});
এখানে, sinon.spy() ব্যবহার করে আমরা একটি ফাংশনের কল ট্র্যাক করছি এবং যাচাই করছি যে সেটি একবার কল হয়েছে কিনা।
সারাংশ
Mocha এবং Chai এর মাধ্যমে Node.js অ্যাপ্লিকেশনের Unit Testing করা খুবই সহজ এবং কার্যকর। আপনি Supertest ব্যবহার করে API টেস্টিং করতে পারেন এবং Sinon.js দিয়ে মকিং এবং স্পাই ব্যবহার করতে পারেন। এটি আপনার অ্যাপ্লিকেশনের কোডের বিশ্বাসযোগ্যতা এবং নির্ভরযোগ্যতা নিশ্চিত করতে সহায়তা করবে, যা একটি প্রোডাকশন-রেডি অ্যাপ্লিকেশন তৈরির জন্য অপরিহার্য।
Read more