RSpec-এ context specific hooks এমন হুকস যা নির্দিষ্ট context বা শর্তের মধ্যে কোড রান করতে ব্যবহৃত হয়। এগুলি RSpec টেস্টের আগে, পরে বা অন্যান্য নির্দিষ্ট সময়ে কার্যকরী হয় এবং টেস্টের কাঠামো বা সুনির্দিষ্ট শর্ত অনুযায়ী কোড চালাতে সাহায্য করে। মূলত, এগুলি before, after, এবং around হুকসের বিশেষ রূপ, যা নির্দিষ্ট context (বর্ণনা) বা describe ব্লকের মধ্যে ব্যবহৃত হয়।
১. Before Hook
before হুক ব্যবহার করে টেস্টের পূর্বে কিছু কোড চালানো হয়। এটি টেস্টের প্রস্তুতির জন্য উপযুক্ত, যেমন ডাটাবেস সেটআপ, ফাইল লোডিং বা অবজেক্ট ইনিশিয়ালাইজেশন।
উদাহরণ:
describe "Calculator" do
before(:each) do
@calc = Calculator.new
end
it "যোগফল সঠিকভাবে বের করে" do
expect(@calc.add(2, 3)).to eq(5)
end
endএখানে, before(:each) প্রতিটি টেস্টের আগে @calc অবজেক্ট তৈরি করবে। ফলে, প্রতিটি টেস্টের জন্য নতুন একটি ক্যালকুলেটর অবজেক্ট থাকবে।
২. After Hook
after হুক ব্যবহার করা হয় টেস্টের পর কিছু কোড চালানোর জন্য। এটি সাধারণত রিসোর্স ক্লিনআপ, লগিং, বা পরবর্তী টেস্টের জন্য কিছু ডেটা পরিবর্তন করার জন্য ব্যবহৃত হয়।
উদাহরণ:
describe "Database" do
after(:each) do
Database.clean_up
end
it "নতুন রেকর্ড ইনসার্ট করে" do
expect(Database.insert_record("Test")).to eq(true)
end
endএখানে, after(:each) টেস্টের পর Database.clean_up ফাংশন চালাবে, যা টেস্ট শেষে ডেটাবেস ক্লিনআপ করবে।
৩. Around Hook
around হুক সাধারণত টেস্ট চালানোর আগে এবং পরে কোড চালানোর জন্য ব্যবহৃত হয়। এটি টেস্টটি মডিফাই বা ম্যানিপুলেট করার সময় ব্যবহার করা হয়।
উদাহরণ:
describe "Time" do
around(:each) do |example|
Timecop.freeze(Time.local(2022, 12, 25)) do
example.run
end
end
it "বর্তমান সময় সঠিকভাবে পরীক্ষা করে" do
expect(Time.now.year).to eq(2022)
end
endএখানে, around(:each) হুক Timecop.freeze ব্যবহার করে সময়টি নির্দিষ্ট করে দেয়। এর ফলে টেস্ট চলাকালীন সময় নির্দিষ্ট একটি তারিখে ফ্রিজ করা থাকবে। example.run টেস্টটি চালানোর নির্দেশ দেয়।
৪. Context Specific Hooks
context ব্যবহার করা হয় একটি নির্দিষ্ট পরিস্থিতিতে টেস্টের আচরণ পরীক্ষা করার জন্য। যখন context ব্যবহার করা হয়, তখন তার সাথে সম্পর্কিত before, after, এবং around হুকসও কার্যকরী হয় সেই নির্দিষ্ট context-এ।
উদাহরণ:
describe "User" do
context "when user is logged in" do
before(:each) do
@user = User.new(logged_in: true)
end
it "should show the dashboard" do
expect(@user.dashboard_visible?).to eq(true)
end
end
context "when user is logged out" do
before(:each) do
@user = User.new(logged_in: false)
end
it "should not show the dashboard" do
expect(@user.dashboard_visible?).to eq(false)
end
end
endএখানে, before(:each) হুক দুটি ভিন্ন context এর জন্য আলাদা ভাবে কার্যকরী হয়েছে। প্রথম context-এ ব্যবহারকারী লগড ইন এবং দ্বিতীয় context-এ ব্যবহারকারী লগড আউট। প্রতিটি পরিস্থিতি অনুযায়ী প্রস্তুতি নেওয়া হয়েছে।
হুকসের ব্যবহারের সুবিধা
- কোড পুনঃব্যবহারযোগ্যতা: before, after, এবং around হুকস টেস্টের প্রস্তুতি ও পরবর্তী কার্যক্রম পুনঃব্যবহারযোগ্য করে তোলে।
- টেস্ট পরিচালনার সহজতা: বিভিন্ন কোডের অংশের জন্য প্রস্তুতি ও পরিষ্কার কাজ করতে হুকস ব্যবহৃত হয়, যা টেস্টকে আরও পরিষ্কার ও সহজ করে তোলে।
- টেস্টের অবস্থা নির্ধারণ:
context-specific হুকস টেস্টের অবস্থা বা পরিবেশ অনুযায়ী কোড রান করতে সহায়ক।
সারাংশ
RSpec-এ context specific hooks টেস্টের নির্দিষ্ট পরিস্থিতির জন্য কোড রান করতে ব্যবহৃত হয়। before, after, এবং around হুকস ব্যবহার করে আপনি টেস্টের প্রস্তুতি, পরবর্তী কার্যক্রম, এবং টেস্টের মাঝে কোড মডিফাই করতে পারেন। এগুলি কোডের সঠিকতার পরীক্ষা করার জন্য কার্যকরী এবং সহজ টেস্ট ব্যবস্থাপনার সহায়ক।
Read more