JasmineJS এ Custom Matchers একটি শক্তিশালী বৈশিষ্ট্য যা আপনাকে আপনার নিজস্ব ম্যাচিং লজিক তৈরি করতে সহায়তা করে। JasmineJS এর প্রাক-নির্ধারিত ম্যাচার্স যেমন toBe(), toEqual(), toContain() ইত্যাদি সাধারণ টেস্টিং চেক করতে ব্যবহৃত হয়। তবে কিছু সময় আপনার বিশেষ ধরনের টেস্টিং দরকার হতে পারে, যা JasmineJS এর ডিফল্ট ম্যাচার্স দ্বারা করা সম্ভব নয়। এ ধরনের পরিস্থিতিতে আপনি Custom Matchers তৈরি করতে পারেন, যা আপনার টেস্ট কেসের জন্য বিশেষ ধরনের ম্যাচিং কন্ডিশন সরবরাহ করবে।
Custom Matchers কি?
Custom Matchers হল এমন একটি ফাংশন যা একটি নতুন টেস্টিং লজিক বা শর্ত তৈরি করে এবং একটি expect() ব্লকের মাধ্যমে ব্যবহার করা যায়। আপনি JasmineJS এ নতুন একটি ম্যাচার তৈরি করে সেটি আপনার টেস্ট কেসে ব্যবহার করতে পারবেন, যা স্বতন্ত্রভাবে আপনার টেস্টের জন্য কার্যকরী হবে।
JasmineJS এ কাস্টম ম্যাচার্স ব্যবহার করে আপনি বিভিন্ন ধরনের পরীক্ষার শর্ত নির্ধারণ করতে পারেন, যেমন বিশেষ ধরনের অবজেক্টের প্রপার্টি চেক করা, নির্দিষ্ট সংখ্যার সাথে তুলনা করা, বা নির্দিষ্ট ধরনের আউটপুট পাওয়ার জন্য কাস্টম যাচাই করা।
Custom Matcher তৈরি করার পদ্ধতি
JasmineJS এ কাস্টম ম্যাচার তৈরি করতে, jasmine.addMatchers() ফাংশন ব্যবহার করা হয়। এই ফাংশনটি একটি অবজেক্ট নেয়, যার মধ্যে আপনার কাস্টম ম্যাচার্সের লজিক থাকে।
সিনট্যাক্স:
beforeEach(function() {
jasmine.addMatchers({
toBeEven: function() {
return {
compare: function(actual) {
const result = {
pass: actual % 2 === 0
};
result.message = actual + " is " + (result.pass ? "even" : "odd");
return result;
}
};
}
});
});
এখানে:
compare(): এটি একটি ফাংশন যা আপনার কাস্টম ম্যাচারের লজিক ধারণ করে। এতে আপনি যা যাচাই করতে চান তা নির্ধারণ করবেন (যেমন, একটি সংখ্যা সঠিক কিনা)।result.pass: এটি একটি বুলিয়ান ভ্যালু যা ফলস্বরূপ সত্য বা মিথ্যা হবে, এটি পরীক্ষা নির্ধারণ করে।result.message: এটি একটি কাস্টম মেসেজ তৈরি করে, যা টেস্ট ফলস্বরূপ দেখাবে।
Custom Matcher ব্যবহার করা
একবার কাস্টম ম্যাচার তৈরি হয়ে গেলে, আপনি এটি expect() ব্লকের সাথে ব্যবহার করতে পারবেন।
উদাহরণ:
describe("Custom Matcher example", function() {
beforeEach(function() {
jasmine.addMatchers({
toBeEven: function() {
return {
compare: function(actual) {
const result = {
pass: actual % 2 === 0
};
result.message = actual + " is " + (result.pass ? "even" : "odd");
return result;
}
};
}
});
});
it("should check if a number is even", function() {
expect(4).toBeEven(); // ৪ একটি সঠিক even সংখ্যা
expect(5).not.toBeEven(); // ৫ একটি odd সংখ্যা
});
});
এখানে:
toBeEvenএকটি কাস্টম ম্যাচার যা যাচাই করে যে একটি সংখ্যা even কিনা।expect(4).toBeEven(): ৪ একটি even সংখ্যা হওয়ায় এই টেস্টটি পাস করবে।expect(5).not.toBeEven(): ৫ একটি odd সংখ্যা হওয়ায় এই টেস্টটি পাস করবে।
Custom Matcher এর সৃজনশীল ব্যবহার
JasmineJS এর কাস্টম ম্যাচার্স শুধুমাত্র সংখ্যা বা স্ট্রিং যাচাইয়ের জন্য নয়, বরং এটি আরো জটিল ধরনের পরীক্ষা পরিচালনা করতে পারে, যেমন:
- অবজেক্টের প্রপার্টি পরীক্ষা করা
- ফাংশন কলের মাধ্যমে প্রাপ্ত আউটপুট যাচাই করা
- অর্থপূর্ণ বার্তা প্রদান
উদাহরণ: অবজেক্টের প্রপার্টি চেক করা
describe("Custom Matcher for object property", function() {
beforeEach(function() {
jasmine.addMatchers({
toHaveProperty: function() {
return {
compare: function(actual, expected) {
const result = {
pass: actual.hasOwnProperty(expected)
};
result.message = actual + (result.pass ? " has the property " : " does not have the property ") + expected;
return result;
}
};
}
});
});
it("should check if an object has a specific property", function() {
const person = { name: "John", age: 30 };
expect(person).toHaveProperty("name"); // 'name' প্রপার্টি আছে
expect(person).not.toHaveProperty("address"); // 'address' প্রপার্টি নেই
});
});
এখানে:
toHaveProperty()কাস্টম ম্যাচারটি যাচাই করছে যে নির্দিষ্ট অবজেক্টে একটি নির্দিষ্ট প্রপার্টি আছে কিনা।expect(person).toHaveProperty("name"):personঅবজেক্টেnameপ্রপার্টি আছে, তাই টেস্টটি পাস করবে।expect(person).not.toHaveProperty("address"):personঅবজেক্টেaddressপ্রপার্টি নেই, তাই টেস্টটি পাস করবে।
Custom Matcher এর সাথে চেক করা বুলিয়ান শর্ত
আপনি বুলিয়ান শর্তেও কাস্টম ম্যাচার তৈরি করতে পারেন, যেমন true/false চেক করা।
উদাহরণ: True/False চেক করা
describe("Custom Matcher for boolean check", function() {
beforeEach(function() {
jasmine.addMatchers({
toBeTrue: function() {
return {
compare: function(actual) {
const result = {
pass: actual === true
};
result.message = actual + " is " + (result.pass ? "true" : "false");
return result;
}
};
}
});
});
it("should check if a value is true", function() {
expect(true).toBeTrue(); // এটি true হওয়ায় টেস্ট পাস করবে
expect(false).not.toBeTrue(); // এটি false হওয়ায় টেস্ট পাস করবে
});
});
এখানে:
toBeTrue()একটি কাস্টম ম্যাচার যা যাচাই করছে যে কোন মানtrueকিনা।expect(true).toBeTrue(): এটিtrueহওয়ায় টেস্ট পাস করবে।expect(false).not.toBeTrue(): এটিfalseহওয়ায় টেস্ট পাস করবে।
কাস্টম ম্যাচার তৈরি করার সুবিধা
- বিশেষ পরীক্ষার জন্য উপযোগী: কাস্টম ম্যাচার ব্যবহার করে আপনি এমন টেস্ট লিখতে পারেন যা JasmineJS এর ডিফল্ট ম্যাচার দিয়ে সম্ভব নয়।
- কোড রিডেবিলিটি বাড়ানো: কাস্টম ম্যাচার ব্যবহার করলে আপনার টেস্ট কেস আরো পরিষ্কার এবং পড়তে সহজ হয়ে ওঠে, কারণ লজিকগুলি আলাদা করে রাখার মাধ্যমে টেস্ট কেস পরিষ্কার হয়।
- টেস্টকে আরো শক্তিশালী করা: আপনি নিজের টেস্টের জন্য অত্যন্ত নির্দিষ্ট ম্যাচিং কন্ডিশন তৈরি করতে পারেন।
সারাংশ
JasmineJS এ Custom Matchers একটি গুরুত্বপূর্ণ বৈশিষ্ট্য যা আপনাকে আপনার নিজস্ব টেস্টিং শর্ত তৈরি করতে সাহায্য করে। আপনি jasmine.addMatchers() ব্যবহার করে কাস্টম ম্যাচার তৈরি করতে পারেন এবং এগুলিকে expect() ব্লকের সাথে ব্যবহার করতে পারেন। এই বৈশিষ্ট্যটি আপনার টেস্টিং প্রক্রিয়াকে আরো শক্তিশালী, পরিষ্কার এবং নির্দিষ্ট করে তোলে, যেখানে JasmineJS এর ডিফল্ট ম্যাচার্স যথেষ্ট নয়।
Read more