Lodash একটি শক্তিশালী JavaScript লাইব্রেরি, যা বিভিন্ন ইউটিলিটি ফাংশন সরবরাহ করে, যেমন ডেটা ম্যানিপুলেশন, ফাংশনাল প্রোগ্রামিং, অ্যারে ও অবজেক্ট প্রসেসিং ইত্যাদি। এই ফাংশনগুলোকে কার্যকরীভাবে ব্যবহার করার জন্য এবং তাদের আউটপুট সঠিক কিনা তা নিশ্চিত করার জন্য টেস্টিং খুবই গুরুত্বপূর্ণ। Lodash ফাংশনের টেস্টিং করা হলে, আপনি আপনার কোডের কার্যকারিতা এবং নির্ভরযোগ্যতা নিশ্চিত করতে পারবেন।
এখানে Lodash ফাংশনের টেস্টিং করার কিছু জনপ্রিয় পদ্ধতি এবং উদাহরণ দেওয়া হলো।
১. Jest দিয়ে Lodash ফাংশন টেস্টিং
Jest হলো একটি জনপ্রিয় টেস্টিং ফ্রেমওয়ার্ক, যা JavaScript এবং React অ্যাপ্লিকেশন টেস্টিংয়ের জন্য ব্যবহৃত হয়। Lodash ফাংশনগুলোর টেস্টিং করার জন্য Jest ব্যবহার করা একটি সহজ এবং কার্যকরী পদ্ধতি।
উদাহরণ: _.map() ফাংশন টেস্ট করা
ধরা যাক, আপনি _.map() ফাংশনটি ব্যবহার করছেন এবং এটি সঠিকভাবে কাজ করছে কিনা তা যাচাই করতে চান।
প্রথমে, Jest ইনস্টল করুন:
npm install --save-dev jest
map ফাংশনের টেস্টিং:
const _ = require('lodash');
test('Test _.map() function', () => {
let numbers = [1, 2, 3, 4];
let doubled = _.map(numbers, num => num * 2);
expect(doubled).toEqual([2, 4, 6, 8]); // আউটপুট চেক করা
});
কমান্ড দিয়ে টেস্ট চালানো:
npx jest
এখানে, _.map() ফাংশনটি টেস্ট করা হয়েছে এবং আমরা যাচাই করেছি যে এটি সঠিকভাবে সংখ্যা দ্বিগুণ করছে কিনা।
২. Mocha এবং Chai দিয়ে Lodash ফাংশন টেস্টিং
Mocha এবং Chai হল আরও দুটি জনপ্রিয় টেস্টিং ফ্রেমওয়ার্ক যা Lodash ফাংশনের টেস্টিংয়ের জন্য ব্যবহার করা যেতে পারে। Mocha টেস্ট রানার এবং Chai assertion library হিসেবে কাজ করে।
Mocha এবং Chai ইনস্টল করা:
npm install --save-dev mocha chai
উদাহরণ: _.filter() ফাংশন টেস্ট করা
const _ = require('lodash');
const chai = require('chai');
const expect = chai.expect;
describe('Lodash _.filter() function', () => {
it('should filter even numbers from an array', () => {
let numbers = [1, 2, 3, 4, 5, 6];
let evenNumbers = _.filter(numbers, num => num % 2 === 0);
expect(evenNumbers).to.eql([2, 4, 6]); // আউটপুট চেক করা
});
});
Mocha টেস্ট চালানো:
npx mocha
এখানে, _.filter() ফাংশনটির টেস্ট করা হয়েছে এবং যাচাই করা হয়েছে যে এটি সঠিকভাবে even numbers বের করছে কিনা।
৩. Jasmine দিয়ে Lodash ফাংশন টেস্টিং
Jasmine একটি behavior-driven development (BDD) টেস্টিং ফ্রেমওয়ার্ক, যা Lodash ফাংশনের টেস্টিংয়ের জন্যও ব্যবহার করা যেতে পারে। Jasmine এর syntax বেশ সহজ এবং সেটআপও কমপ্লেক্স নয়।
Jasmine ইনস্টল করা:
npm install --save-dev jasmine
উদাহরণ: _.uniq() ফাংশন টেস্ট করা
const _ = require('lodash');
describe('Lodash _.uniq() function', () => {
it('should remove duplicate values from an array', () => {
let numbers = [1, 2, 2, 3, 4, 4, 5];
let uniqueNumbers = _.uniq(numbers);
expect(uniqueNumbers).toEqual([1, 2, 3, 4, 5]); // আউটপুট চেক করা
});
});
Jasmine টেস্ট চালানো:
npx jasmine
এখানে, _.uniq() ফাংশনটি টেস্ট করা হয়েছে এবং যাচাই করা হয়েছে যে এটি সঠিকভাবে ডুপ্লিকেট সংখ্যা সরাচ্ছে কিনা।
৪. Test Coverage
আপনার Lodash ফাংশনগুলো টেস্ট করার সময়, আপনি code coverage এর জন্য টুলসও ব্যবহার করতে পারেন, যেমন Jest, Mocha, এবং Istanbul। এই টুলসগুলো আপনাকে টেস্ট করা কোডের পরিসর এবং কী অংশ পরীক্ষা করা হয়নি তা দেখতে সাহায্য করবে।
Jest এ Coverage রিপোর্ট চালানো:
npx jest --coverage
এটি টেস্টের ফলাফল এবং কভারেজ রিপোর্ট জেনারেট করবে, যার মাধ্যমে আপনি বুঝতে পারবেন আপনার কোডের কতটা অংশ টেস্ট করা হয়েছে।
৫. Unit Testing vs Integration Testing
- Unit Testing: এটি একক ফাংশন বা মডিউল পরীক্ষা করার প্রক্রিয়া, যেখানে একটি নির্দিষ্ট ফাংশনের লজিক বা কাজের সঠিকতা নিশ্চিত করা হয়। Lodash ফাংশনের ক্ষেত্রে, প্রতিটি ফাংশন আলাদাভাবে টেস্ট করা যেতে পারে।
- Integration Testing: এটি একাধিক ফাংশন বা মডিউলের সমন্বয়ে তৈরি করা হয়। যখন Lodash এর বিভিন্ন ফাংশন একসাথে কাজ করে, তখন পুরো সিস্টেমের সঠিকতা যাচাই করা হয়।
উদাহরণ: Unit Test vs Integration Test
- Unit Test:
_.map(),_.filter()ইত্যাদি ফাংশনগুলি আলাদাভাবে টেস্ট করা হবে। - Integration Test:
_.chain()এর মতো একাধিক ফাংশনের সমন্বয় টেস্ট করা হবে, যেখানে একটি নির্দিষ্ট প্রক্রিয়ার (যেমন, ডেটা ফিল্টার করা, ম্যাপ করা, ইত্যাদি) সমস্ত অংশ একত্রে কাজ করছে কিনা তা পরীক্ষা করা হবে।
উপসংহার
Lodash ফাংশনের টেস্টিং অত্যন্ত গুরুত্বপূর্ণ, বিশেষ করে যখন আপনার অ্যাপ্লিকেশন বা ওয়েবসাইটে বড় আকারের ডেটা ম্যানিপুলেশন বা জটিল ফাংশনালিটি রয়েছে। Jest, Mocha, Chai, এবং Jasmine এর মতো টেস্টিং ফ্রেমওয়ার্ক ব্যবহার করে আপনি সহজেই Lodash ফাংশনগুলোর কার্যকারিতা যাচাই করতে পারেন। এছাড়া code coverage টুলস ব্যবহার করে আপনি আপনার টেস্ট স্যুটের পরিসর বাড়াতে এবং নির্দিষ্ট ফাংশনের সঠিকতা নিশ্চিত করতে পারেন।
Unit Testing হল কোডের ছোট অংশগুলি পরীক্ষা করার প্রক্রিয়া, যাতে প্রতিটি ফাংশন বা মেথড সঠিকভাবে কাজ করছে কিনা তা নিশ্চিত করা যায়। Lodash এর মতো লাইব্রেরি ব্যবহার করার সময়ও unit testing অত্যন্ত গুরুত্বপূর্ণ, কারণ এর মাধ্যমে আপনি আপনার কোডের কার্যকারিতা এবং সঠিকতা নিশ্চিত করতে পারবেন। Lodash এর জন্য unit tests লেখার মাধ্যমে আপনি সহজেই নিশ্চিত করতে পারবেন যে আপনার কোড সঠিকভাবে কাজ করছে এবং ভবিষ্যতে কোডে কোনো পরিবর্তন করলে আগের ফাংশনালিটি ক্ষতিগ্রস্ত হবে না।
এখানে Lodash এর জন্য unit testing এবং test cases লেখার পদ্ধতি আলোচনা করা হলো।
১. Unit Testing এর জন্য প্রয়োজনীয় টুলস
Unit Testing এর জন্য কয়েকটি জনপ্রিয় টুলস রয়েছে, যা Lodash ফাংশনগুলির সঠিকতা পরীক্ষা করার জন্য ব্যবহার করা যায়:
- Mocha: JavaScript এর জন্য একটি টেস্ট ফ্রেমওয়ার্ক যা সহজেই ব্যবহার করা যায়।
- Chai: Assertion লাইব্রেরি, যা Mocha এর সাথে একসাথে কাজ করে এবং টেস্টগুলোতে assertion তৈরি করতে সাহায্য করে।
- Jest: Facebook দ্বারা তৈরি একটি testing ফ্রেমওয়ার্ক যা সহজ setup এবং out-of-the-box assertion সরবরাহ করে।
এখানে Mocha এবং Chai এর সাথে Lodash এর কিছু ফাংশন পরীক্ষা করার পদ্ধতি দেখানো হবে।
২. Mocha এবং Chai ইনস্টল করা
প্রথমে Mocha এবং Chai ইনস্টল করতে হবে।
npm install --save-dev mocha chai lodash
৩. Unit Testing এবং Test Cases
এখন আমরা Lodash এর কিছু জনপ্রিয় ফাংশন (যেমন map(), filter(), cloneDeep()) এর উপর test case তৈরি করব।
উদাহরণ ১: _.map() ফাংশনের Testing
_.map() ফাংশনটি একটি array এর প্রতিটি উপাদানকে modify করে নতুন array রিটার্ন করে।
Test Case:
const _ = require('lodash');
const assert = require('chai').assert;
describe('Lodash _.map() Function', function() {
it('should double the values of the array', function() {
const input = [1, 2, 3, 4];
const expected = [2, 4, 6, 8];
const result = _.map(input, num => num * 2);
assert.deepEqual(result, expected, 'Array elements should be doubled');
});
});
ব্যাখ্যা:
- এখানে
_.map()ফাংশনটি একটি array থেকে প্রতিটি উপাদানকে দ্বিগুণ করছে এবং Chai'sassert.deepEqual()ব্যবহার করে যাচাই করা হচ্ছে যে রিটার্ন হওয়া array সঠিক কিনা।
উদাহরণ ২: _.filter() ফাংশনের Testing
_.filter() ফাংশনটি একটি array এর মধ্যে থেকে একটি নির্দিষ্ট শর্ত পূর্ণ করা উপাদানগুলো বের করে।
Test Case:
describe('Lodash _.filter() Function', function() {
it('should filter even numbers', function() {
const input = [1, 2, 3, 4, 5, 6];
const expected = [2, 4, 6];
const result = _.filter(input, num => num % 2 === 0);
assert.deepEqual(result, expected, 'Only even numbers should be in the result');
});
});
ব্যাখ্যা:
- এখানে
_.filter()ফাংশনটি অ্যারে থেকে শুধুমাত্র even সংখ্যাগুলো ফিল্টার করছে, এবং তারপর সেই ফলাফলটি চেক করা হচ্ছে।
উদাহরণ ৩: _.cloneDeep() ফাংশনের Testing
_.cloneDeep() ফাংশনটি একটি object বা array এর গভীর কপি তৈরি করে, যাতে মূল ডেটা অক্ষুণ্ণ থাকে।
Test Case:
describe('Lodash _.cloneDeep() Function', function() {
it('should create a deep clone of an object', function() {
const original = { name: 'John', address: { city: 'New York' } };
const clone = _.cloneDeep(original);
// Modifying the clone object
clone.address.city = 'Los Angeles';
assert.notDeepEqual(original.address.city, clone.address.city, 'Original object should not be modified');
assert.deepEqual(original.address.city, 'New York', 'Original object should remain unchanged');
});
});
ব্যাখ্যা:
- এখানে
_.cloneDeep()ব্যবহার করে আমরাoriginalobject এর একটি গভীর কপি তৈরি করছি, এবং তারপর clone object এর মধ্যে পরিবর্তন করছি। এরপর যাচাই করা হচ্ছে যে original object পরিবর্তিত হয়নি এবং clone object সঠিকভাবে পরিবর্তিত হয়েছে।
৪. describe() এবং it() ফাংশন
describe(): এটি একটি test suite তৈরি করে যেখানে আপনি একাধিক test case লিখতে পারেন।it(): এটি একটি একক test case বা assertion তৈরি করে।
৫. Mocha কমান্ড দিয়ে টেস্ট চালানো
Mocha এর মাধ্যমে টেস্টগুলো চালাতে, আপনাকে একটি test script তৈরি করতে হবে।
package.json ফাইলে test স্ক্রিপ্ট যুক্ত করুন:
{
"scripts": {
"test": "mocha"
}
}
এখন টেস্ট চালানোর জন্য কমান্ডটি ব্যবহার করুন:
npm test
উপসংহার
Unit Testing হল কোডের সঠিকতা এবং কার্যকারিতা নিশ্চিত করার একটি গুরুত্বপূর্ণ পদ্ধতি, বিশেষ করে যখন আপনি একটি লাইব্রেরি যেমন Lodash ব্যবহার করছেন। Mocha এবং Chai ব্যবহার করে Lodash এর বিভিন্ন ফাংশনের উপর unit tests তৈরি করা যেতে পারে, যা কোডের সঠিকতা যাচাই করতে সাহায্য করে। উপরোক্ত উদাহরণগুলো দিয়ে আপনি Lodash এর বিভিন্ন ফাংশন যেমন _.map(), _.filter(), এবং _.cloneDeep() এর উপর test case তৈরি করতে পারেন এবং সেগুলির কার্যকারিতা নিশ্চিত করতে পারেন।
Mocha এবং Chai হল JavaScript টেস্টিং লাইব্রেরি যা ইউনিট টেস্টিং এবং অ্যাসারশন ফাংশন প্রদান করে। Lodash এর মতো লাইব্রেরির জন্য, Mocha এবং Chai ব্যবহার করে টেস্টিং করা সহজ এবং কার্যকরী। এখানে আমরা Mocha এবং Chai এর সাথে Lodash ফাংশনগুলো টেস্ট করার পদ্ধতি দেখব।
১. Mocha এবং Chai ইনস্টল করা
প্রথমে, আপনার প্রোজেক্টে Mocha এবং Chai ইনস্টল করতে হবে। আপনি npm ব্যবহার করে এটি করতে পারেন।
npm init -y
npm install --save-dev mocha chai
এটি Mocha (টেস্ট রানার) এবং Chai (অ্যাসারশন লাইব্রেরি) ইনস্টল করবে।
২. Mocha টেস্ট ফাইল তৈরি করা
এখন আপনি একটি টেস্ট ফাইল তৈরি করুন, যেমন test.js যেখানে আপনি Lodash এর ফাংশন টেস্ট করবেন।
উদাহরণ: test.js ফাইল তৈরি করা
const assert = require('chai').assert; // Chai assert ব্যবহার করা
const _ = require('lodash'); // Lodash ইম্পোর্ট করা
describe('Lodash Functions Tests', function() {
it('should test _.map() function', function() {
const numbers = [1, 2, 3, 4];
const doubled = _.map(numbers, (num) => num * 2);
assert.deepEqual(doubled, [2, 4, 6, 8]); // assert চেক করে যে doubled array সঠিক কিনা
});
it('should test _.filter() function', function() {
const numbers = [1, 2, 3, 4, 5];
const evens = _.filter(numbers, (num) => num % 2 === 0);
assert.deepEqual(evens, [2, 4]); // assert চেক করে যে evens array সঠিক কিনা
});
it('should test _.uniq() function', function() {
const numbers = [1, 2, 2, 3, 4, 4, 5];
const uniqueNumbers = _.uniq(numbers);
assert.deepEqual(uniqueNumbers, [1, 2, 3, 4, 5]); // assert চেক করে যে unique array সঠিক কিনা
});
});
এখানে, তিনটি Lodash ফাংশনের টেস্ট করা হয়েছে:
_.map()- একটি অ্যারে থেকে প্রতিটি মানে গুণ করা হয়েছে।_.filter()- অ্যারের মধ্যে শুধু even সংখ্যাগুলো বের করা হয়েছে।_.uniq()- অ্যারের duplicate সংখ্যা সরিয়ে নতুন ইউনিক অ্যারে তৈরি করা হয়েছে।
৩. টেস্ট রান করা
Mocha ব্যবহার করে টেস্ট রান করতে, আপনি নীচের কমান্ডটি চালাতে পারেন:
npx mocha test.js
এটি আপনার test.js ফাইলটি রান করবে এবং টেস্টগুলো execute করবে। আপনি যদি সব টেস্ট একসাথে চালাতে চান, তবে কমান্ডটি এক্সিকিউট করলে আপনি নিচের মতো আউটপুট দেখতে পারবেন।
উদাহরণ আউটপুট:
Lodash Functions Tests
✓ should test _.map() function
✓ should test _.filter() function
✓ should test _.uniq() function
3 passing (10ms)
৪. আরও কিছু উদাহরণ
_.chain() টেস্ট করা:
it('should test _.chain() function', function() {
const numbers = [1, 2, 3, 4, 5];
const result = _.chain(numbers)
.filter(num => num % 2 === 0)
.map(num => num * 2)
.value(); // .value() দিয়ে চেইন শেষ করা
assert.deepEqual(result, [4, 8]);
});
এখানে, _.chain() ব্যবহার করে একাধিক ফাংশন চেইন করা হয়েছে এবং শেষে .value() কল করে ফলাফল নেওয়া হয়েছে।
_.debounce() টেস্ট করা:
it('should test _.debounce() function', function(done) {
const spy = chai.spy(); // Chai spy ব্যবহার করে
const debouncedFunc = _.debounce(spy, 100);
debouncedFunc();
debouncedFunc();
debouncedFunc();
setTimeout(() => {
assert(spy.calledOnce); // spy.assert.check করে যে debouncedFunc একবারই call হয়েছে
done();
}, 200);
});
এখানে _.debounce() ফাংশনটি টেস্ট করা হয়েছে, যাতে দেখানো হয়েছে যে ফাংশনটি কতবার কল করা হচ্ছে এবং কিভাবে Debouncing কাজ করছে।
৫. টেস্টিংয়ের জন্য Chai এর ব্যবহার
Chai হল একটি অ্যাসারশন লাইব্রেরি যা JavaScript টেস্টিং ফ্রেমওয়ার্কে অ্যাসারশনস (assertions) প্রদান করে। Lodash এর ফাংশনগুলোর টেস্ট করার জন্য Chai এর assert বা expect পদ্ধতি ব্যবহার করা যায়।
Chai এর Assertion Methods:
assert.deepEqual(value1, value2)- value1 এবং value2 সমান কিনা তা যাচাই করে।assert.isTrue(value)- valuetrueকিনা তা যাচাই করে।assert.isArray(value)- value একটি অ্যারে কিনা তা যাচাই করে।
উপসংহার
Mocha এবং Chai ব্যবহার করে আপনি Lodash এর ফাংশনগুলো খুব সহজেই টেস্ট করতে পারেন। Lodash এর বিভিন্ন ফাংশন যেমন _.map(), _.filter(), _.uniq() ইত্যাদি সহজেই ইউনিট টেস্টিংয়ের মাধ্যমে পরীক্ষা করা যায়, এবং আপনি এই টেস্টিং পদ্ধতি ব্যবহার করে আপনার কোডের মান বজায় রাখতে পারেন। Mocha একটি টেস্ট রানার হিসেবে কাজ করে এবং Chai অ্যাসারশন লাইব্রেরি হিসেবে আপনার টেস্টের ফলাফল যাচাই করে।
Lodash একটি শক্তিশালী JavaScript লাইব্রেরি, যা বিভিন্ন utility functions সরবরাহ করে। যখন আপনি Lodash এর functions ব্যবহার করেন, তখন তাদের পারফরম্যান্স এবং সঠিক আউটপুট নিশ্চিত করার জন্য টেস্টিং অত্যন্ত গুরুত্বপূর্ণ। এখানে Lodash এর functions এর expected output টেস্টিং করার জন্য কিভাবে কাজ করবেন, তা নিয়ে আলোচনা করা হবে।
১. Jest এর মাধ্যমে Lodash ফাংশনের টেস্টিং
Jest হল একটি জনপ্রিয় টেস্টিং ফ্রেমওয়ার্ক, যা JavaScript কোডের টেস্টিংয়ের জন্য ব্যবহার করা হয়। Lodash এর functions এর expected output টেস্ট করার জন্য Jest ব্যবহার করা যেতে পারে।
১.১. Jest ইনস্টল করা
প্রথমে Jest ইনস্টল করুন:
npm install --save-dev jest
এটি Jest টেস্টিং ফ্রেমওয়ার্ক আপনার প্রোজেক্টে ইনস্টল করবে।
১.২. Lodash এবং Jest এর মাধ্যমে টেস্টিং
এখন আমরা একটি Lodash function (যেমন _.map(), _.filter(), বা _.sortBy()) এর উপর টেস্ট তৈরি করব।
উদাহরণ: _.map() ফাংশন টেস্ট করা
// myTest.js
const _ = require('lodash');
test('should double the numbers', () => {
const numbers = [1, 2, 3, 4];
const result = _.map(numbers, num => num * 2);
// Expected output is [2, 4, 6, 8]
expect(result).toEqual([2, 4, 6, 8]);
});
ব্যাখ্যা:
- এখানে
_.map()ফাংশনটি একটি array নিয়ে প্রতিটি উপাদানকে দ্বিগুণ (multiply by 2) করছে। expect(result).toEqual([2, 4, 6, 8])চেক করে যে,resultarray আসলেই[2, 4, 6, 8]কিনা।
১.৩. টেস্ট চালানো
Jest টেস্ট চালাতে, আপনি নীচের কমান্ডটি ব্যবহার করতে পারেন:
npx jest
এটি আপনার টেস্ট ফাইলগুলি চালাবে এবং ফলাফল দেখাবে।
২. Mocha এবং Chai এর মাধ্যমে Lodash ফাংশনের টেস্টিং
আরেকটি জনপ্রিয় টেস্টিং টুল হল Mocha এবং Chai, যেগুলি ব্যবহৃত হয় BDD (Behavior-Driven Development) টেস্টিং ফ্রেমওয়ার্ক হিসেবে। Lodash এর ফাংশনের টেস্টিং করতে Mocha এবং Chai ব্যবহার করতে পারেন।
২.১. Mocha এবং Chai ইনস্টল করা
Mocha এবং Chai ইনস্টল করতে নিচের কমান্ডটি ব্যবহার করুন:
npm install --save-dev mocha chai
২.২. Mocha এবং Chai এর মাধ্যমে Lodash ফাংশন টেস্টিং
এখানে আমরা _.filter() ফাংশনের টেস্ট তৈরি করব Mocha এবং Chai ব্যবহার করে।
// test.js
const _ = require('lodash');
const { expect } = require('chai');
describe('Lodash Tests', () => {
it('should return even numbers', () => {
const numbers = [1, 2, 3, 4, 5, 6];
const result = _.filter(numbers, num => num % 2 === 0);
// Expected output is [2, 4, 6]
expect(result).to.eql([2, 4, 6]);
});
});
ব্যাখ্যা:
- এখানে
_.filter()ফাংশনটি even numbers (২, ৪, ৬) বের করার জন্য ব্যবহার করা হয়েছে। expect(result).to.eql([2, 4, 6])চেক করে যেresultarray আসলেই[2, 4, 6]কিনা।
২.৩. টেস্ট চালানো
Mocha টেস্ট চালানোর জন্য কমান্ডটি ব্যবহার করুন:
npx mocha test.js
এটি আপনার টেস্ট ফাইল চালাবে এবং ফলাফল দেখাবে।
৩. Lodash এর অন্যান্য Functions এর টেস্টিং উদাহরণ
এখানে আমরা আরও কিছু Lodash ফাংশন এর টেস্টিং দেখব। আপনি _.sortBy(), _.keyBy(), এবং _.sum() এর মতো বিভিন্ন ফাংশন নিয়ে টেস্ট তৈরি করতে পারেন।
৩.১. _.sortBy() ফাংশন টেস্টিং
test('should sort numbers in ascending order', () => {
const numbers = [5, 2, 8, 3];
const result = _.sortBy(numbers);
// Expected output is [2, 3, 5, 8]
expect(result).toEqual([2, 3, 5, 8]);
});
৩.২. _.keyBy() ফাংশন টেস্টিং
test('should convert array to object by key', () => {
const users = [
{ 'user': 'John', 'age': 30 },
{ 'user': 'Jane', 'age': 25 }
];
const result = _.keyBy(users, 'user');
// Expected output is an object with users as keys
expect(result).toEqual({
'John': { 'user': 'John', 'age': 30 },
'Jane': { 'user': 'Jane', 'age': 25 }
});
});
৩.৩. _.sum() ফাংশন টেস্টিং
test('should sum all numbers in the array', () => {
const numbers = [1, 2, 3, 4];
const result = _.sum(numbers);
// Expected output is 10
expect(result).toEqual(10);
});
৪. Test Coverage এবং Performance Testing
আপনার টেস্টিং শুধুমাত্র expected output নিশ্চিত করার জন্য নয়, বরং performance testing এবং coverage নিশ্চিত করার জন্যও করা উচিত।
- Performance Testing: Lodash এর বড় অ্যারে বা ডেটা সেটগুলির জন্য ফাংশন ব্যবহার করার আগে পারফরম্যান্স টেস্ট করা গুরুত্বপূর্ণ।
- Coverage: আপনি যে ফাংশনগুলো ব্যবহার করছেন, সেগুলোর প্রতি পর্যায়ক্রমে টেস্ট তৈরি করা গুরুত্বপূর্ণ।
উপসংহার
Lodash এর functions এর expected output টেস্টিং করা একটি গুরুত্বপূর্ণ অংশ যখন আপনি আপনার JavaScript অ্যাপ্লিকেশনে Lodash ব্যবহার করেন। Jest, Mocha, এবং Chai এর মাধ্যমে আপনি Lodash এর ফাংশনগুলোকে টেস্ট করতে পারেন, যা আপনার কোডের স্থিতিশীলতা এবং নির্ভরযোগ্যতা নিশ্চিত করবে। এই টেস্টিং পদ্ধতিগুলি আপনার অ্যাপ্লিকেশনকে আরও কার্যকরী এবং নিরাপদ করে তুলবে।
Lodash একটি শক্তিশালী লাইব্রেরি যা ডেটা ম্যানিপুলেশন এবং অন্যান্য ফাংশনাল অপারেশনগুলো সহজ করে দেয়, তবে কখনও কখনও কিছু edge cases (প্রান্তিক কেস) এবং error handling গুরুত্বপূর্ণ হয়ে ওঠে। এই ধরনের পরিস্থিতিতে ফাংশনগুলির সঠিকভাবে কাজ করছে কিনা তা যাচাই করা গুরুত্বপূর্ণ। Lodash এর সাথে কাজ করার সময় unit tests এবং edge case handling নিয়ে চিন্তা করা উচিত।
এখানে আলোচনা করা হবে কীভাবে Lodash ব্যবহার করে edge cases এবং error handling এর জন্য টেস্ট লেখা যায়।
১. Jest টেস্টিং ফ্রেমওয়ার্ক ব্যবহার করা
Jest একটি জনপ্রিয় JavaScript টেস্টিং ফ্রেমওয়ার্ক, যা unit testing এবং edge case সনাক্ত করতে সহায়তা করে। Lodash এর ফাংশনগুলোর টেস্ট লেখার জন্য Jest ব্যবহার করতে পারেন।
Jest ইনস্টল করা
প্রথমে, Jest ইনস্টল করতে হবে:
npm install --save-dev jest
এছাড়া, যদি আপনি ES6 modules ব্যবহার করেন, তাহলে babel-jest ইনস্টল করতে হতে পারে।
npm install --save-dev babel-jest @babel/core @babel/preset-env
২. Lodash এর Edge Cases টেস্ট করা
এখন আমরা Lodash এর কিছু সাধারণ ফাংশনের টেস্টিং কেস লিখব, বিশেষত edge cases এবং error handling।
এ. _.get() ফাংশনের Edge Case
_.get() ফাংশনটি অবজেক্ট বা অ্যারে থেকে নির্দিষ্ট প্রোপার্টি বা ভ্যালু অ্যাক্সেস করতে ব্যবহার করা হয়। আমরা যাচাই করব যে, এটি অব্যবহৃত বা undefined প্রোপার্টি অ্যাক্সেসের সময় সঠিকভাবে ডিফল্ট ভ্যালু রিটার্ন করে কিনা।
উদাহরণ: _.get() এর জন্য টেস্ট লেখা
import _ from 'lodash';
describe('_.get() Edge Cases', () => {
it('should return the default value when accessing undefined property', () => {
const object = { name: 'Alice' };
const result = _.get(object, 'address', 'Unknown Address');
expect(result).toBe('Unknown Address'); // Expected default value
});
it('should return undefined for non-existent properties if no default value is provided', () => {
const object = { name: 'Bob' };
const result = _.get(object, 'address');
expect(result).toBeUndefined(); // Should return undefined
});
it('should correctly access nested properties', () => {
const object = { user: { name: 'Charlie', age: 30 } };
const result = _.get(object, 'user.name');
expect(result).toBe('Charlie'); // Should correctly access the nested value
});
});
এখানে, আমরা _.get() ফাংশনটির জন্য তিনটি edge case পরীক্ষা করেছি:
- undefined প্রোপার্টি: যদি প্রোপার্টি না থাকে তবে এটি ডিফল্ট মান রিটার্ন করবে।
- অব্যবহৃত প্রোপার্টি: কোনো প্রোপার্টি না থাকলে এটি
undefinedরিটার্ন করবে। - nested প্রোপার্টি: এটি সঠিকভাবে nested প্রোপার্টি অ্যাক্সেস করবে।
৩. _.set() ফাংশনের Error Handling
_.set() ফাংশনটি অবজেক্টে একটি নতুন প্রোপার্টি সেট করতে ব্যবহৃত হয়। এর জন্য টেস্ট লিখতে হলে আমাদের চেক করতে হবে যে এটি সঠিকভাবে ডেটা ম্যানিপুলেট করছে এবং কোনো ভুল প্রোপার্টি বা type error রিসিভ করছে কিনা।
উদাহরণ: _.set() এর জন্য টেস্ট লেখা
import _ from 'lodash';
describe('_.set() Error Handling', () => {
it('should set a property correctly on a simple object', () => {
const object = {};
_.set(object, 'user.name', 'Alice');
expect(object.user.name).toBe('Alice');
});
it('should handle non-existent objects and create nested properties', () => {
const object = {};
_.set(object, 'user.address.city', 'New York');
expect(object.user.address.city).toBe('New York');
});
it('should handle invalid path gracefully', () => {
const object = {};
_.set(object, 'user.name', 'Bob');
expect(object.user.name).toBe('Bob');
// Trying to set an invalid path (e.g. array key) should not crash
_.set(object, 'user[invalidPath].value', 'test');
expect(object.user[invalidPath]?.value).toBe('test'); // Should not throw error
});
});
এখানে, আমরা _.set() ফাংশনের তিনটি টেস্ট কেস লিখেছি:
- একটি সাধারণ অবজেক্টে প্রোপার্টি সেট করা।
- নেস্টেড প্রোপার্টি সেট করা, যেখানে অবজেক্টটি প্রথমে তৈরি হয়নি।
- অবৈধ পাথ ব্যবহার করা, যা ভুল প্রোপার্টি বা অবৈধ অ্যারে ইনডেক্স ব্যবহার করতে পারে।
৪. _.cloneDeep() ফাংশনের Edge Case
_.cloneDeep() একটি গভীর কপি তৈরি করে, কিন্তু কখনও কখনও আপনি যদি এর সাথে সঠিক টাইপ বা ইনপুট ডেটার প্রকার যাচাই না করেন, তবে এটি infinite loops বা stack overflow ঘটাতে পারে। তাই আমরা নিশ্চিত করব যে এটি circular references (যেমন অবজেক্টের মধ্যে নিজেকে রেফারেন্স করা) এবং nested structures সঠিকভাবে কপি করছে।
উদাহরণ: _.cloneDeep() এর জন্য টেস্ট লেখা
import _ from 'lodash';
describe('_.cloneDeep() Edge Cases', () => {
it('should clone an object deeply without affecting the original object', () => {
const object = { name: 'Alice', age: 25 };
const clonedObject = _.cloneDeep(object);
clonedObject.name = 'Bob';
expect(object.name).toBe('Alice');
expect(clonedObject.name).toBe('Bob');
});
it('should handle circular references safely', () => {
const object = {};
object.self = object; // circular reference
const clonedObject = _.cloneDeep(object);
expect(clonedObject).toEqual(object); // Should not throw an error
expect(clonedObject.self).toEqual(clonedObject);
});
it('should correctly clone nested objects', () => {
const object = { user: { name: 'Charlie', details: { age: 30 } } };
const clonedObject = _.cloneDeep(object);
clonedObject.user.details.age = 35;
expect(object.user.details.age).toBe(30);
expect(clonedObject.user.details.age).toBe(35);
});
});
এখানে, _.cloneDeep() এর জন্য তিনটি টেস্ট কেস লিখেছি:
- একটি সাধারণ অবজেক্টের কপি তৈরি করা।
- Circular reference (যেখানে একটি অবজেক্ট নিজেকে রেফারেন্স করে) সঠিকভাবে কপি করা।
- Nested objects (যেখানে অবজেক্টের ভিতরে অবজেক্ট থাকে) কপি করা।
৫. Error Handling Best Practices
- Invalid Inputs: সকল ফাংশন কলের আগে ইনপুট যাচাই করা উচিত। Lodash এর
_.isEmpty(),_.isObject(),_.isArray()ফাংশন ব্যবহার করে ইনপুট ভ্যালিডেশন নিশ্চিত করা যেতে পারে। - Graceful Error Handling: কোডে কোনো ভুল বা ব্যতিক্রম (exception) ঘটলে, এটি সুন্দরভাবে হ্যান্ডেল করুন। Lodash এর
_.attempt()ফাংশনটি কোনো ফাংশন কলের সময় ঘটে যাওয়া ত্রুটি ধরা এবং হ্যান্ডেল করতে ব্যবহৃত হয়।
const _ = require('lodash');
let result = _.attempt(() => {
// Some operation that might throw an error
return JSON.parse("invalid JSON");
});
if (_.isError(result)) {
console.log("An error occurred:", result.message);
}
এখানে, _.attempt() ব্যবহার করে কোনো ফাংশন কলের সময় error handling করা হয়েছে।
উপসংহার
Lodash এর ফাংশনগুলি অনেক শক্তিশালী এবং সঠিকভাবে ব্যবহার করলে কোড আরও কার্যকরী এবং রক্ষণাবেক্ষণযোগ্য হয়ে ওঠে। তবে, edge cases এবং error handling নিশ্চিত করার জন্য সঠিক টেস্ট লেখা অত্যন্ত গুরুত্বপূর্ণ। Jest এর মতো টেস্টিং ফ্রেমওয়ার্ক ব্যবহার করে Lodash এর ফাংশনগুলোর কার্যকারিতা পরীক্ষা করে আপনি সঠিকভাবে validation, error handling, এবং edge case সনাক্ত করতে পারবেন।
Read more