টেস্টিংয়ের সময় 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 এর মধ্যে ডেটা এবং স্টেট প্রস্তুত করতে সহায়ক এবং টেস্ট চলাকালে সঠিক অবস্থা বা ডেটা বজায় রাখতে সাহায্য করে।
Read more