JasmineJS এর Matchers ফিচারটি শুধুমাত্র সোজা মান (primitive values) নয়, বরং complex objects এবং arrays এর জন্যও কার্যকর। আপনি যখন জাভাস্ক্রিপ্টের অবজেক্ট, অ্যারে বা অন্যান্য জটিল ডাটা স্ট্রাকচার নিয়ে কাজ করেন, তখন JasmineJS এর বিভিন্ন Matcher ব্যবহার করে সেগুলোর কার্যকারিতা এবং অবস্থা পরীক্ষা করতে পারেন।
JasmineJS এর বিভিন্ন Matcher রয়েছে যা objects এবং arrays এর তুলনা ও যাচাই করতে ব্যবহৃত হয়। এই Matchers গুলি আপনাকে ডাটা স্ট্রাকচারগুলির মধ্যে মান বা উপাদান সমতা এবং উপস্থিতি পরীক্ষা করতে সাহায্য করে।
toEqual() Matcher
toEqual() Matcher একটি অবজেক্ট বা অ্যারের মান সমতা (deep equality) পরীক্ষা করতে ব্যবহৃত হয়। এটি মান এবং তার ভিতরের গঠন (structure) পরীক্ষা করে, তাই এটি দুটি অবজেক্ট বা অ্যারের মধ্যে সমতা যাচাই করতে উপযুক্ত।
উদাহরণ:
describe("toEqual matcher", function() {
it("should check if two objects are equal", function() {
const user1 = { name: "Alice", age: 25 };
const user2 = { name: "Alice", age: 25 };
expect(user1).toEqual(user2); // user1 এবং user2 অবজেক্ট দুটি সমান হওয়া উচিত
});
});
এখানে toEqual() Matcher দুটি অবজেক্ট user1 এবং user2 এর ভিতরের মান এবং গঠন তুলনা করছে, এবং এটি সঠিকভাবে যাচাই করবে যে তারা সমান কিনা।
অ্যারে উদাহরণ:
describe("toEqual matcher with arrays", function() {
it("should check if two arrays are equal", function() {
const array1 = [1, 2, 3];
const array2 = [1, 2, 3];
expect(array1).toEqual(array2); // array1 এবং array2 সমান হওয়া উচিত
});
});
এখানে toEqual() Matcher দুটি অ্যারের মধ্যে মান এবং তাদের সিরিয়াল টানা (sequence) যাচাই করবে।
toContain() Matcher
toContain() Matcher অ্যারে বা স্ট্রিংয়ের মধ্যে একটি নির্দিষ্ট উপাদান বা মানের উপস্থিতি পরীক্ষা করতে ব্যবহৃত হয়। এটি চেক করে যে একটি নির্দিষ্ট মান অ্যারে বা স্ট্রিংয়ের মধ্যে আছে কিনা।
উদাহরণ:
describe("toContain matcher", function() {
it("should check if an array contains a value", function() {
const fruits = ["apple", "banana", "orange"];
expect(fruits).toContain("banana"); // fruits অ্যারেতে "banana" থাকতে হবে
});
});
এখানে toContain() Matcher যাচাই করছে যে অ্যারে fruits এর মধ্যে "banana" উপাদানটি রয়েছে কিনা।
স্ট্রিং উদাহরণ:
describe("toContain matcher with string", function() {
it("should check if a string contains a substring", function() {
const greeting = "Hello, world!";
expect(greeting).toContain("world"); // greeting স্ট্রিংয়ে "world" থাকতে হবে
});
});
এখানে toContain() Matcher স্ট্রিংয়ের মধ্যে "world" সাবস্ট্রিংয়ের উপস্থিতি যাচাই করছে।
toBeDefined() Matcher
toBeDefined() Matcher একটি মান পরীক্ষা করে যে তা undefined নয়। এটি বিশেষভাবে ব্যবহৃত হয় যখন আপনি নিশ্চিত হতে চান যে একটি অবজেক্টের প্রপার্টি বা একটি অ্যারে উপাদান বর্তমান রয়েছে।
উদাহরণ:
describe("toBeDefined matcher", function() {
it("should check if a property is defined in an object", function() {
const user = { name: "Alice", age: 25 };
expect(user.name).toBeDefined(); // user.name অবশ্যই defined (undefined নয়)
});
});
এখানে toBeDefined() Matcher যাচাই করছে যে user.name প্রপার্টি undefined নয়, অর্থাৎ সেটি আসলেই সংজ্ঞায়িত (defined)।
toHaveBeenCalledWith() Matcher
toHaveBeenCalledWith() Matcher টেস্ট করার জন্য ব্যবহৃত হয় যে, একটি স্পাই করা ফাংশন কল হয়েছে কিনা এবং সেই কলটি সঠিক আর্গুমেন্ট সহ হয়েছে কিনা। এটি অবজেক্ট বা অ্যারে এর মত complex ডাটা নিয়ে কাজ করার জন্যও খুবই উপযোগী।
উদাহরণ:
describe("toHaveBeenCalledWith matcher", function() {
it("should check if a function has been called with specific arguments", function() {
const user = {
greet: function(name, age) {
return `Hello, ${name}, you are ${age} years old.`;
}
};
spyOn(user, 'greet'); // greet মেথডটি স্পাই করা হচ্ছে
user.greet("Alice", 25);
expect(user.greet).toHaveBeenCalledWith("Alice", 25); // greet মেথডটি ঠিক আর্গুমেন্টের সাথে কল হয়েছে কিনা যাচাই
});
});
এখানে toHaveBeenCalledWith() Matcher যাচাই করছে যে user.greet মেথডটি "Alice" এবং 25 আর্গুমেন্ট সহ কল হয়েছে।
toMatch() Matcher (Objects and Arrays)
toMatch() Matcher সাধারণত রেগুলার এক্সপ্রেশন (RegEx) পরীক্ষা করার জন্য ব্যবহৃত হয়, তবে এটি complex objects এবং arrays এ মেলানোর জন্যও ব্যবহার করা যেতে পারে। যখন আপনি কোনো অবজেক্টের বা অ্যারের বৈশিষ্ট্য রেগুলার এক্সপ্রেশন দিয়ে পরীক্ষা করতে চান, তখন এটি ব্যবহার করা হয়।
উদাহরণ:
describe("toMatch matcher", function() {
it("should check if an array contains an item matching a pattern", function() {
const users = ["alice@example.com", "bob@example.com", "charlie@example.net"];
expect(users).toMatch(/example.com/); // অ্যারেতে "example.com" থাকা উচিত
});
});
এখানে toMatch() Matcher অ্যারেতে "example.com" থাকা উপাদানটি পরীক্ষা করছে, রেগুলার এক্সপ্রেশন দিয়ে।
সারাংশ
JasmineJS এ complex objects এবং arrays এর জন্য কিছু বিশেষ Matcher রয়েছে যা আপনাকে আপনার কোডের গঠন ও মান পরীক্ষা করতে সহায়তা করে। মূল Matchers গুলোর মধ্যে রয়েছে:
toEqual(): অবজেক্ট এবং অ্যারে সমতা পরীক্ষা।toContain(): অ্যারে বা স্ট্রিংয়ের মধ্যে উপাদান উপস্থিতি পরীক্ষা।toBeDefined(): অবজেক্টের প্রপার্টি বা অ্যারে উপাদান সংজ্ঞায়িত (defined) কিনা পরীক্ষা।toHaveBeenCalledWith(): স্পাই করা ফাংশন সঠিক আর্গুমেন্ট সহ কল হয়েছে কিনা যাচাই।toMatch(): রেগুলার এক্সপ্রেশন দিয়ে স্ট্রিং বা অ্যারে যাচাই।
এই Matchers গুলি ব্যবহার করে আপনি অবজেক্ট এবং অ্যারে ভিত্তিক জটিল ডাটা স্ট্রাকচারের কার্যকারিতা সহজে পরীক্ষা করতে পারবেন।
Read more