RSpec-এ হুকস (Hooks) ব্যবহৃত হয় কোডের নির্দিষ্ট অংশগুলোকে টেস্টের আগে বা পরে চালানোর জন্য। হুকস দিয়ে আপনি টেস্টগুলোর সাধারণ সেটআপ এবং ক্লিনআপ প্রক্রিয়া কাস্টমাইজ করতে পারেন। এর মাধ্যমে আপনি কোডের পুনঃব্যবহারযোগ্যতা বাড়াতে পারবেন এবং টেস্টের কার্যকারিতা আরও পরিষ্কার করতে পারবেন।
হুকস (Hooks) কী?
RSpec-এ হুক এমন একটি বিশেষ ফিচার যা আপনাকে টেস্ট রানের আগে বা পরে কিছু নির্দিষ্ট কোড চালানোর সুযোগ দেয়। এটি সাধারণত কোডের প্রস্তুতি বা টেস্ট শেষে পরিস্কার করার জন্য ব্যবহৃত হয়।
প্রধান ধরনের হুক
RSpec-এ তিনটি প্রধান হুক ব্যবহৃত হয়:
- before: টেস্ট শুরু হওয়ার আগে কোড রান করাতে ব্যবহৃত হয়।
- after: টেস্ট শেষ হওয়ার পরে কোড রান করাতে ব্যবহৃত হয়।
- around: টেস্টের আগে এবং পরে কোড রান করাতে ব্যবহৃত হয়, এটি টেস্টের আগে ও পরে কোড একসাথে চালাতে সাহায্য করে।
১. before হুক
before হুক ব্যবহৃত হয় প্রতিটি টেস্টের আগে কিছু কোড রান করতে। এটি সাধারণত টেস্টের জন্য প্রয়োজনীয় প্রাথমিক সেটআপ করার জন্য ব্যবহৃত হয়।
উদাহরণ:
describe "Calculator" do
before(:each) do
@calc = Calculator.new # প্রতিটি টেস্টের আগে নতুন Calculator তৈরি হবে
end
it "should add two numbers" do
expect(@calc.add(2, 3)).to eq(5)
end
it "should subtract two numbers" do
expect(@calc.subtract(5, 3)).to eq(2)
end
endএখানে, before(:each) হুক প্রতিটি টেস্টের আগে একটি নতুন Calculator অবজেক্ট তৈরি করে।
২. after হুক
after হুক ব্যবহৃত হয় টেস্ট শেষ হওয়ার পরে কিছু কোড চালাতে। এটি সাধারণত পরিস্কারকরণ বা ক্লিনআপ কাজের জন্য ব্যবহৃত হয়, যেমন রিসোর্স মুক্ত করা বা ফাইল সিস্টেমের কাজ সম্পন্ন করা।
উদাহরণ:
describe "File Operations" do
after(:each) do
File.delete("temp.txt") if File.exist?("temp.txt") # ফাইল মুছে ফেলা হবে
end
it "should create a new file" do
File.write("temp.txt", "Hello, World!")
expect(File.exist?("temp.txt")).to be(true)
end
endএখানে, after(:each) হুকটি প্রতিটি টেস্ট শেষে temp.txt ফাইলটি মুছে দেয়।
৩. around হুক
around হুকটি before এবং after এর মতো, তবে এটি টেস্টের আগে এবং পরে কোড একসাথে চালানোর জন্য ব্যবহৃত হয়। around হুক ব্যবহার করার সময়, টেস্ট রান করার জন্য কোডের একটি ব্লক পাস করা হয়। এই ব্লকটি চলবে, এবং তারপর আপনি টেস্ট শুরু ও শেষ করার জন্য কোড চালাতে পারবেন।
উদাহরণ:
describe "Calculator" do
around(:each) do |example|
# টেস্ট শুরু হওয়ার আগে কিছু কোড চালানো
puts "Starting test..."
example.run # টেস্ট চালানো
# টেস্ট শেষ হওয়ার পরে কিছু কোড চালানো
puts "Test finished!"
end
it "should add two numbers" do
expect(2 + 3).to eq(5)
end
endএখানে, around(:each) হুকটি টেস্টের আগে এবং পরে কিছু অতিরিক্ত কোড চালাবে। example.run কল করা হলে আসল টেস্ট কোডটি রান করবে।
হুকস এর রেঞ্জ
before(:each): প্রতিটি টেস্টের আগে রান করবে।before(:all): একবারে একবার, পুরো ডেসক্রাইব ব্লক চালানোর আগে একবার।after(:each): প্রতিটি টেস্টের পরে রান করবে।after(:all): একবারে একবার, পুরো ডেসক্রাইব ব্লক চালানোর পরে একবার।
উদাহরণ:
describe "Calculator" do
before(:all) do
# একবারে একবার পুরো ডেসক্রাইব ব্লকের আগে
puts "Setting up tests..."
end
after(:all) do
# একবারে একবার পুরো ডেসক্রাইব ব্লকের পরে
puts "Cleaning up after tests..."
end
before(:each) do
@calc = Calculator.new
end
it "should add two numbers" do
expect(@calc.add(2, 3)).to eq(5)
end
it "should subtract two numbers" do
expect(@calc.subtract(5, 3)).to eq(2)
end
endএখানে, before(:all) এবং after(:all) হুকগুলো পুরো ডেসক্রাইব ব্লকের আগে এবং পরে একবার চালানো হবে, যখন before(:each) এবং after(:each) প্রতিটি টেস্টের আগে এবং পরে চালানো হবে।
সারাংশ
RSpec-এ হুকগুলি আপনার টেস্ট কোডের সেটআপ এবং ক্লিনআপ প্রক্রিয়া আরও সহজ ও কার্যকর করতে ব্যবহৃত হয়। before হুকটি টেস্টের আগে কোড চালায়, after হুকটি টেস্ট শেষে কোড চালায়, এবং around হুকটি টেস্টের আগে ও পরে কোড চালায়। এই হুকগুলো ব্যবহার করে আপনি কোডের পুনঃব্যবহারযোগ্যতা বৃদ্ধি করতে পারেন এবং টেস্ট রানকে আরও সুসংহত ও কার্যকরী করতে পারেন।
RSpec এ হুকস (Hooks) হলো বিশেষ ফাংশন যা টেস্ট চালানোর আগে বা পরে স্বয়ংক্রিয়ভাবে চালানো হয়। এগুলি বিভিন্ন পরিস্থিতিতে কোডের কার্যকারিতা নিয়ন্ত্রণ এবং টেস্টিং পরিবেশ প্রস্তুত করার জন্য ব্যবহার করা হয়। মূলত তিনটি ধরনের হুক রয়েছে: before, after, এবং around।
1. before Hook
before hook টেস্টের আগে কোড চালানোর জন্য ব্যবহৃত হয়। এটি টেস্ট চালানোর আগে নির্দিষ্ট পরিবেশ বা পরিস্থিতি তৈরি করতে সাহায্য করে। সাধারণত টেস্টের জন্য প্রস্তুতি কাজ করার সময় ব্যবহার করা হয়, যেমন ডেটাবেস সেশন তৈরি করা বা কিছু ডেটা ইনিশিয়ালাইজ করা।
ব্যবহার:
describe "Calculator" do
before(:each) do
# টেস্ট শুরু হওয়ার আগে যা কিছু করতে হবে
@calculator = Calculator.new
end
it "দ্বিতীয় সংখ্যা যোগ করে সঠিক ফলাফল দেয়" do
expect(@calculator.add(2, 3)).to eq(5)
end
endএখানে before(:each) টেস্টের আগে @calculator ইনস্ট্যান্স তৈরি করে।
অন্যান্য ভ্যারিয়েন্ট:
before(:all): এটি সমস্ত টেস্টের আগে একবার চালানো হয়, যা পুরো ডেসক্রাইব ব্লকের জন্য প্রযোজ্য।before(:all) do # সমস্ত টেস্টের আগে একবার চালানো হবে end
2. after Hook
after hook টেস্টের পরে কোড চালানোর জন্য ব্যবহৃত হয়। এটি টেস্ট শেষ হওয়ার পর কিছু ক্লিনআপ কাজ যেমন ডেটাবেস রিসেট বা ফাইল ডিলিট করার জন্য ব্যবহার করা হয়।
ব্যবহার:
describe "Calculator" do
after(:each) do
# টেস্টের পরে যা কিছু করতে হবে (যেমন ফাইল/ডেটাবেস ক্লিনআপ)
puts "এই টেস্টটির পরে ক্লিনআপ সম্পন্ন"
end
it "দ্বিতীয় সংখ্যা যোগ করে সঠিক ফলাফল দেয়" do
expect(@calculator.add(2, 3)).to eq(5)
end
endএখানে after(:each) টেস্টের পরে puts স্টেটমেন্টটি চালাবে।
অন্যান্য ভ্যারিয়েন্ট:
after(:all): এটি সমস্ত টেস্টের পরে একবার চালানো হয়, যা পুরো ডেসক্রাইব ব্লকের জন্য প্রযোজ্য।after(:all) do # সমস্ত টেস্টের পরে একবার চালানো হবে end
3. around Hook
around hook একটি বিশেষ ধরনের হুক, যা টেস্টের আগে এবং পরে কোড চালানোর জন্য ব্যবহৃত হয়। এটি আপনাকে টেস্টের পুরো পরিবেশের আগে এবং পরে কিছু কাস্টম লজিক চালাতে দেয়। এটি বিশেষত তখন ব্যবহৃত হয় যখন আপনি টেস্টের চালানো সময়ের মধ্যে কিছু নির্দিষ্ট কার্যাবলী পরিচালনা করতে চান, যেমন লগিং বা টাইমিং, অথবা সম্পূর্ণ টেস্টের আচরণ নিয়ন্ত্রণ করতে চান।
ব্যবহার:
describe "Calculator" do
around(:each) do |example|
# টেস্ট শুরু হওয়ার আগে কিছু কোড চালানো হবে
puts "টেস্ট শুরু হচ্ছে"
example.run
# টেস্ট শেষে কিছু কোড চালানো হবে
puts "টেস্ট শেষ"
end
it "দ্বিতীয় সংখ্যা যোগ করে সঠিক ফলাফল দেয়" do
expect(@calculator.add(2, 3)).to eq(5)
end
endএখানে around(:each) হুকটি টেস্ট শুরু হওয়ার আগে এবং পরে কিছু কোড চালাতে দেয়। example.run টেস্টটি চালানোর জন্য ব্যবহৃত হয়।
অন্যান্য ভ্যারিয়েন্ট:
around(:all): এটি সমস্ত টেস্টের আগে এবং পরে একবার চালানো হয়।around(:all) do |example| # সমস্ত টেস্টের আগে কিছু কোড চালানো হবে example.run # সমস্ত টেস্টের পরে কিছু কোড চালানো হবে end
সারাংশ
beforeHook: টেস্ট চালানোর আগে কিছু কাজ সম্পাদন করতে ব্যবহৃত হয়, যেমন সেটআপ বা ইনিশিয়ালাইজেশন।afterHook: টেস্ট সম্পন্ন হওয়ার পরে কিছু কাজ সম্পাদন করতে ব্যবহৃত হয়, যেমন ক্লিনআপ বা ডিলিট করা।aroundHook: টেস্ট চালানোর আগে এবং পরে কিছু কাস্টম লজিক চালানোর জন্য ব্যবহৃত হয়। এটি আপনাকে পুরো টেস্টের কার্যক্রম নিয়ন্ত্রণ করার সুবিধা দেয়।
এই হুকগুলো RSpec-এ টেস্টের প্রিপারেশন, ক্লিনআপ, এবং কাস্টম কার্যকলাপ পরিচালনা করতে সাহায্য করে, এবং এর মাধ্যমে টেস্টিং আরও শক্তিশালী ও নমনীয় হয়।
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 হুকস ব্যবহার করে আপনি টেস্টের প্রস্তুতি, পরবর্তী কার্যক্রম, এবং টেস্টের মাঝে কোড মডিফাই করতে পারেন। এগুলি কোডের সঠিকতার পরীক্ষা করার জন্য কার্যকরী এবং সহজ টেস্ট ব্যবস্থাপনার সহায়ক।
টেস্টিংয়ের সময় Test Data এবং State Setup গুরুত্বপূর্ণ ভূমিকা পালন করে, কারণ এগুলি কোডের বিভিন্ন অংশ পরীক্ষা করার জন্য সঠিক পরিবেশ প্রস্তুত করতে সাহায্য করে। RSpec-এ Test Data এবং State Setup এর জন্য বিভিন্ন পদ্ধতি রয়েছে, যা কোডের নির্ভুলতা নিশ্চিত করতে সহায়ক।
১. Test Data তৈরি করার পদ্ধতি
টেস্টিং করার জন্য সঠিক এবং বাস্তবসম্মত ডেটা ব্যবহার করা খুবই গুরুত্বপূর্ণ। RSpec-এ Test Data তৈরি করতে let, before, এবং fixtures ব্যবহৃত হতে পারে।
a. let
let ব্যবহার করে আপনি টেস্টে ডেটা বা অবজেক্ট তৈরি করতে পারেন। let হলো একটি বিলম্বিত ভ্যালু (lazy initialization) এবং এটি টেস্টের মধ্যে ব্যবহার করা যেতে পারে। এটি একটি ভেরিয়েবল ডিফাইন করে এবং প্রয়োজন হলে তা ফেরত দেয়।
উদাহরণ:
let(:user) { User.new(name: "John", email: "john@example.com") }
it "ব্যবহারকারীর নাম সঠিক কিনা যাচাই করে" do
expect(user.name).to eq("John")
endএখানে let(:user) দিয়ে user অবজেক্টটি তৈরি করা হয়েছে, যা পরবর্তী টেস্টে ব্যবহার করা যাবে।
b. before(:each)
before(:each) ব্লকের মধ্যে আপনি ডেটা তৈরি করতে পারেন যা প্রতিটি টেস্টের আগে একবার চালানো হবে। এটি ব্যবহার করে আপনি নির্দিষ্ট অবস্থা প্রস্তুত করতে পারেন।
উদাহরণ:
before(:each) do
@user = User.create(name: "Alice", email: "alice@example.com")
end
it "ব্যবহারকারী তৈরি হয়েছে কিনা যাচাই করে" do
expect(@user.name).to eq("Alice")
endএখানে before(:each) ব্লকটি প্রতিটি টেস্টের আগে চালানো হবে এবং এটি @user অবজেক্ট তৈরি করবে।
c. Fixtures
আরেকটি পদ্ধতি হলো fixtures ব্যবহার করা, যেখানে আপনি পূর্বনির্ধারিত ডেটাবেসের রেকর্ডগুলো অ্যাক্সেস করতে পারেন। এটি অধিকাংশ সময় ডেটাবেসের টেস্টে ব্যবহৃত হয়।
fixtures :users
it "ব্যবহারকারীর নাম সঠিক কিনা যাচাই করে" do
expect(users(:john).name).to eq("John")
endএখানে fixtures ব্যবহার করে পূর্বে ডিফাইন করা users টেবিল থেকে ডেটা ব্যবহার করা হয়েছে।
২. State Setup করার পদ্ধতি
State Setup মানে হলো টেস্টের জন্য কোডের নির্দিষ্ট অবস্থান প্রস্তুত করা। এটি সাধারণত ডাটাবেস স্টেট, ইন-মেমরি অবজেক্টস বা টেস্ট ডেটা এর অবস্থান তৈরি করে।
a. State Setup with before(:all)
before(:all) ব্যবহার করলে, টেস্টের শুরুতে একবার ডেটা বা অবস্থা তৈরি করা হয়, যা সমস্ত টেস্টের জন্য শেয়ার করা যায়। এটি শুধুমাত্র একবার চালানো হয়, তাই এটি অনেক বড় ডেটা সেটআপের জন্য উপযুক্ত।
উদাহরণ:
before(:all) do
@product = Product.create(name: "Smartphone", price: 499)
end
it "পণ্যটির নাম সঠিক কিনা যাচাই করে" do
expect(@product.name).to eq("Smartphone")
endএখানে before(:all) একবার চালানোর মাধ্যমে @product তৈরি করা হয়েছে যা সমস্ত টেস্টে ব্যবহার করা যাবে।
b. State Cleanup with after(:each)
টেস্ট শেষে অবস্থা বা ডেটা পরিষ্কার করতে after(:each) ব্যবহার করা হয়। এটি টেস্টের পরবর্তী টেস্টে বিরক্তিকর অবস্থা সৃষ্টি করতে দেয় না।
উদাহরণ:
after(:each) do
@user.destroy
end
it "ব্যবহারকারী তথ্য সঠিক কিনা যাচাই করে" do
expect(@user.name).to eq("Alice")
endএখানে after(:each) ব্লকটি ব্যবহার করা হয়েছে যাতে প্রতিটি টেস্টের পরে @user অবজেক্টটি ডিলিট হয়ে যায়।
c. Database Rollback with Transactions
অনেক ক্ষেত্রে টেস্টের জন্য ডাটাবেস ব্যবহার করা হয়। টেস্টের পরে ডেটাবেসের রেকর্ড সাফ করতে আপনি ট্রানজেকশন ব্যবহার করতে পারেন যাতে টেস্টের পরে ডেটাবেস রোলব্যাক হয়। এটি RSpec এর সাথে সহজেই করা যায়।
before(:each) do
@user = User.create(name: "Test User", email: "test@example.com")
end
after(:each) do
@user.destroy
endএখানে টেস্টের শেষে @user ডিলিট হয়ে যাবে এবং ডেটাবেসে কোনো পরিবর্তন হবে না।
সারাংশ
- Test Data তৈরি করার জন্য
let,before(:each), এবং fixtures ব্যবহৃত হয়। - State Setup করতে
before(:each),before(:all), এবং after হুক ব্যবহার করা হয়। - এই পদ্ধতিগুলি RSpec এর মধ্যে ডেটা এবং স্টেট প্রস্তুত করতে সহায়ক এবং টেস্ট চলাকালে সঠিক অবস্থা বা ডেটা বজায় রাখতে সাহায্য করে।
RSpec এ Hooks ব্যবহৃত হয় টেস্টের আগে এবং পরে কিছু কোড রান করার জন্য। এগুলি বিশেষভাবে resource cleanup বা প্রতিটি টেস্টের পর অব্যবহৃত রিসোর্স মুক্ত করার জন্য ব্যবহৃত হয়। এটি নিশ্চিত করে যে টেস্ট শেষে সিস্টেম বা ডাটাবেসে কোনও অপ্রয়োজনীয় অবস্থা বা রিসোর্স রয়ে যায় না, যা পরবর্তী টেস্টগুলির সঠিকতা বা কার্যকারিতাকে প্রভাবিত করতে পারে।
RSpec এ তিনটি প্রধান Hooks রয়েছে:
- before(:each)
- after(:each)
- before(:all)
- after(:all)
এই হুকগুলির সাহায্যে টেস্ট শুরু এবং শেষ হওয়ার আগে বা পরে নির্দিষ্ট কাজ সম্পাদন করা যায়, যেমন ডাটাবেস কানেকশন ক্লোজ করা, ফাইল ডিলিট করা, অথবা অন্য কোনো ক্লিনআপ কাজ করা।
Hooks এর ধরন ও ব্যবহার
1. before(:each)
এই হুকটি প্রতিটি টেস্টের আগে চলে, অর্থাৎ it ব্লকের শুরুতে চলে। এটি সাধারণত টেস্টের জন্য প্রয়োজনীয় রিসোর্স বা অবস্থা সেটআপ করার জন্য ব্যবহৃত হয়।
উদাহরণ:
describe "Calculator" do
before(:each) do
@calc = Calculator.new # প্রতি টেস্টের আগে Calculator অবজেক্ট তৈরি করা হবে
end
it "যোগফল সঠিকভাবে বের করে" do
expect(@calc.add(2, 3)).to eq(5)
end
it "বিয়োগফল সঠিকভাবে বের করে" do
expect(@calc.subtract(5, 3)).to eq(2)
end
endএখানে before(:each) হুকটি Calculator অবজেক্টটি প্রতি টেস্টের আগে তৈরি করছে।
2. after(:each)
এই হুকটি প্রতিটি টেস্টের পরে চলে, অর্থাৎ টেস্ট শেষ হওয়ার পর এটি রিসোর্স ফ্রি করার জন্য ব্যবহার করা হয়। এটি সাধারণত টেস্টের পর অব্যবহৃত রিসোর্স বা অবস্থা মুক্ত করার জন্য ব্যবহৃত হয়।
উদাহরণ:
describe "File handling" do
after(:each) do
File.delete("temp_file.txt") if File.exist?("temp_file.txt")
end
it "ফাইল তৈরি করে" do
File.write("temp_file.txt", "Temporary Data")
expect(File.exist?("temp_file.txt")).to be true
end
endএখানে after(:each) হুকটি প্রতি টেস্টের পর "temp_file.txt" ফাইলটি ডিলিট করবে।
3. before(:all)
এই হুকটি একবারে শুধুমাত্র পুরো describe ব্লকের জন্য একবারই চলে। এটি সাধারণত টেস্টের জন্য প্রস্তুতি নেওয়ার জন্য ব্যবহৃত হয়, যেমন ডাটাবেসে টেবিল তৈরি করা বা অন্য কোনো মক অবস্থা তৈরি করা।
উদাহরণ:
describe "Database connection" do
before(:all) do
@db = Database.connect
end
it "ডাটাবেসের সাথে সংযুক্ত থাকে" do
expect(@db.connected?).to be true
end
endএখানে before(:all) হুকটি ডাটাবেস কানেকশন তৈরি করার জন্য ব্যবহৃত হয়েছে, যা describe ব্লকের মধ্যে প্রথম টেস্টের আগে একবারই চলবে।
4. after(:all)
এই হুকটি একবারে describe ব্লকের শেষে চলে। এটি সাধারণত টেস্টের পরের কাজ যেমন ডাটাবেস কানেকশন বন্ধ করা, ফাইল সিস্টেম পরিষ্কার করা ইত্যাদি কাজের জন্য ব্যবহৃত হয়।
উদাহরণ:
describe "Database connection" do
after(:all) do
@db.disconnect
end
it "ডাটাবেসের সাথে সংযুক্ত থাকে" do
expect(@db.connected?).to be true
end
endএখানে after(:all) হুকটি ডাটাবেস কানেকশন বন্ধ করার জন্য ব্যবহৃত হয়েছে, যা describe ব্লকের শেষে একবার চলবে।
Resource Cleanup এর গুরুত্ব
- পারফরম্যান্স বাড়ানো: টেস্টের পর রিসোর্স ক্লিনআপ নিশ্চিত করে যে পরবর্তী টেস্টের জন্য কোনও অব্যবহৃত বা অপ্রয়োজনীয় রিসোর্স অবশিষ্ট থাকে না।
- নির্ভরযোগ্যতা বৃদ্ধি: প্রতিটি টেস্টে কোডের আচরণ একইভাবে পরীক্ষিত হয়, কারণ আগের টেস্টের পর অবশিষ্ট কিছু থাকতে পারে না।
- সহজ ডিবাগিং: যদি কোনও টেস্টে সমস্যা হয়, তখন Hooks ব্যবহার করে কোডের অবস্থা পরিষ্কার করা সহজ হয়।
সারাংশ
RSpec এ Hooks ব্যবহৃত হয় resource cleanup বা প্রস্তুতির জন্য। এগুলি কোডের আচরণ নিশ্চিত করার জন্য অত্যন্ত কার্যকরী, কারণ এগুলি টেস্ট শুরু এবং শেষ হওয়ার আগে বা পরে কিছু কাজ করে থাকে। before(:each), after(:each), before(:all), এবং after(:all) হুকগুলির সাহায্যে টেস্টের পূর্ববর্তী ও পরবর্তী অবস্থা নিয়ন্ত্রণ করা যায়।
Read more