RSpec এ Custom Matchers তৈরি করার মাধ্যমে আপনি আপনার টেস্টিং প্রক্রিয়াকে আরও সহজ এবং বোধগম্য করতে পারেন। এটি ব্যবহার করে নির্দিষ্ট বৈশিষ্ট্য বা আচরণ যাচাই করার জন্য নতুন ম্যাচার তৈরি করা যায়। Custom Matchers মূলত তখনই ব্যবহৃত হয় যখন বিল্ট-ইন ম্যাচারগুলো আপনার প্রয়োজন মেটাতে সক্ষম হয় না।
Custom Matchers তৈরির ধাপ
১. RSpec::Matchers.define ব্যবহার করে ম্যাচার তৈরি
Custom Matchers তৈরির জন্য RSpec::Matchers.define মেথড ব্যবহার করা হয়। এটি একটি নতুন ম্যাচার সংজ্ঞায়িত করতে সাহায্য করে।
RSpec::Matchers.define :be_multiple_of do |expected|
match do |actual|
actual % expected == 0
end
endউপরের উদাহরণে, আমরা একটি be_multiple_of ম্যাচার তৈরি করেছি যা নির্ধারণ করে যে একটি সংখ্যা অন্য একটি সংখ্যার গুণিতক কিনা।
Custom Matchers এর উপাদানসমূহ
match ব্লক
এটি মূল অংশ যেখানে ম্যাচারের লজিক বা শর্ত লেখা হয়।
match do |actual|
actual % expected == 0
endfailure_message (ঐচ্ছিক)
যদি টেস্ট ব্যর্থ হয়, তবে এটি কাস্টম বার্তা প্রদর্শন করতে ব্যবহৃত হয়।
failure_message do |actual|
"Expected #{actual} to be a multiple of #{expected}"
endfailure_message_when_negated (ঐচ্ছিক)
যখন ম্যাচার নেগেটিভ (e.g., not_to) অবস্থায় ব্যবহার করা হয়, তখন ব্যর্থ বার্তা প্রদর্শন করতে ব্যবহৃত হয়।
failure_message_when_negated do |actual|
"Expected #{actual} not to be a multiple of #{expected}"
enddescription (ঐচ্ছিক)
ম্যাচারটির একটি সংক্ষিপ্ত বিবরণ প্রদান করতে ব্যবহৃত হয়।
description do
"be a multiple of #{expected}"
endএকটি উদাহরণ: গুণিতক যাচাই
কোড
RSpec::Matchers.define :be_multiple_of do |expected|
match do |actual|
actual % expected == 0
end
failure_message do |actual|
"Expected #{actual} to be a multiple of #{expected}, but it was not."
end
failure_message_when_negated do |actual|
"Expected #{actual} not to be a multiple of #{expected}, but it was."
end
endটেস্ট ব্যবহার
describe "Custom Matchers" do
it "যাচাই করে যে সংখ্যা গুণিতক কিনা" do
expect(10).to be_multiple_of(2) # পাস হবে
expect(10).not_to be_multiple_of(3) # পাস হবে
end
endCustom Matchers ব্যবহার: বাস্তব উদাহরণ
১. একটি অ্যারের মধ্যে নির্দিষ্ট উপাদান থাকা যাচাই করা
RSpec::Matchers.define :include_element do |expected|
match do |actual|
actual.include?(expected)
end
end
describe "Array Matcher" do
it "অ্যারের মধ্যে উপাদান আছে কিনা যাচাই করে" do
expect([1, 2, 3]).to include_element(2) # পাস হবে
expect([1, 2, 3]).not_to include_element(5) # পাস হবে
end
end২. একটি স্ট্রিং নির্দিষ্ট ফর্ম্যাট অনুসরণ করছে কিনা
RSpec::Matchers.define :match_format do |regex|
match do |actual|
actual.match?(regex)
end
end
describe "String Matcher" do
it "স্ট্রিং ফর্ম্যাট যাচাই করে" do
expect("hello@example.com").to match_format(/\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i) # পাস হবে
expect("invalid-email").not_to match_format(/\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i) # পাস হবে
end
endসুবিধা
- সহজবোধ্য টেস্ট: কোড পড়তে ও বোঝতে আরও সহজ।
- পুনরায় ব্যবহারযোগ্যতা: একবার তৈরি করলে Custom Matchers বিভিন্ন টেস্টে পুনরায় ব্যবহার করা যায়।
- নির্দিষ্ট চাহিদা পূরণ: যখন বিল্ট-ইন ম্যাচার যথেষ্ট নয়, তখন এটি প্রয়োজনীয় বৈশিষ্ট্য যোগ করতে সাহায্য করে।
সারাংশ
Custom Matchers RSpec এর একটি শক্তিশালী ফিচার, যা আপনার টেস্টিং অভিজ্ঞতাকে আরও সহজ ও বোধগম্য করে তোলে। RSpec::Matchers.define এবং এর বিভিন্ন উপাদান (যেমন match, failure_message) ব্যবহার করে আপনি আপনার টেস্টিং চাহিদা অনুযায়ী কাস্টমাইজড ম্যাচার তৈরি করতে পারেন। এটি টেস্টিং প্রক্রিয়াকে আরও বিস্তারিত ও কার্যকর করে তোলে।
Read more