RSpec এ Shared Resources ব্যবহৃত হয় যখন একাধিক টেস্টে একই ধরনের ডেটা বা অবজেক্ট বারবার ব্যবহার করতে হয়। এটি কোডকে পুনঃব্যবহারযোগ্য এবং সংগঠিত করে তোলে, এবং টেস্টিংকে আরও সহজ এবং দ্রুত করে তোলে। RSpec এ shared examples এবং shared contexts দুটি প্রধান উপায় রয়েছে যা আপনি complex test cases এর জন্য shared resources তৈরি করতে ব্যবহার করতে পারেন।
১. Shared Examples (শেয়ারড এক্সাম্পল)
Shared Examples ব্যবহৃত হয় যখন একই ধরনের টেস্ট একাধিক স্থানে পুনরায় ব্যবহার করতে হয়। এটি কোডের পুনঃব্যবহারযোগ্যতা এবং কার্যকারিতা বাড়াতে সাহায্য করে।
উদাহরণ:
ধরা যাক, আমাদের একটি অ্যাপ্লিকেশন রয়েছে যা ব্যবহারকারীর নাম যাচাই করে, এবং আমাদের এই টেস্টটি বিভিন্ন ক্ষেত্রে পুনরায় ব্যবহার করতে হবে।
# shared_examples.rb
RSpec.shared_examples "একটি বৈধ ব্যবহারকারীর নাম" do
it "ব্যবহারকারীর নাম অবশ্যই ৩ টি অক্ষরের বেশি হতে হবে" do
expect(user.name.length).to be > 3
end
it "ব্যবহারকারীর নাম সঠিকভাবে ফর্ম্যাট করা উচিত" do
expect(user.name).to match(/[A-Za-z]+/)
end
endএখন, এই শেয়ারড এক্সাম্পলটি আমরা বিভিন্ন টেস্টে ব্যবহার করতে পারি:
describe "ব্যবহারকারী A" do
let(:user) { User.new(name: "Alice") }
it_behaves_like "একটি বৈধ ব্যবহারকারীর নাম"
end
describe "ব্যবহারকারী B" do
let(:user) { User.new(name: "Bob") }
it_behaves_like "একটি বৈধ ব্যবহারকারীর নাম"
endএখানে, it_behaves_like ব্যবহার করে আমরা একই টেস্ট কোডকে বিভিন্ন বর্ণনায় ব্যবহার করেছি, যাতে একই আচরণ যাচাই করা যায়।
২. Shared Context (শেয়ারড কনটেক্সট)
Shared Context ব্যবহৃত হয় একাধিক টেস্টের জন্য একটি সাধারণ কনটেক্সট বা প্রস্তুতি ভাগ করতে। এটি ডাটাবেস সেটআপ, ফাইল ডাউনলোড, বা অন্যান্য প্রস্তুতিমূলক কাজের জন্য ব্যবহার করা হয়।
উদাহরণ:
ধরা যাক, আমাদের একটি কনটেক্সট রয়েছে যা কিছু ডেটাবেস বা অবজেক্ট প্রস্তুত করে যা একাধিক টেস্টে ব্যবহার করতে হবে।
# shared_contexts.rb
RSpec.shared_context "প্রাথমিক ডেটাবেস প্রস্তুতি" do
before do
@user = User.create(name: "Alice", email: "alice@example.com")
@product = Product.create(name: "Laptop", price: 1000)
end
endএখন, এই shared context-টি আমরা বিভিন্ন টেস্টে ব্যবহার করতে পারি:
describe "ব্যবহারকারী এবং পণ্য" do
include_context "প্রাথমিক ডেটাবেস প্রস্তুতি"
it "ব্যবহারকারী সঠিকভাবে নিবন্ধিত হয়েছে" do
expect(@user).to be_valid
end
it "পণ্য সঠিকভাবে যোগ করা হয়েছে" do
expect(@product).to be_valid
end
endএখানে, include_context ব্যবহার করে আমরা shared context কে বিভিন্ন টেস্টে যুক্ত করেছি, যার মাধ্যমে আমাদের ডেটাবেস বা প্রস্তুতির তথ্য শেয়ার করা হয়েছে।
Shared Resources এর সুবিধা
- কোড পুনঃব্যবহারযোগ্যতা: Shared Examples এবং Shared Context ব্যবহারের মাধ্যমে একই কোড বারবার না লিখে পুনরায় ব্যবহার করা যায়।
- সংগঠিত টেস্টিং: একাধিক টেস্টের জন্য এক ধরনের শেয়ারড রিসোর্স ব্যবহার করা টেস্টকে আরও সংগঠিত এবং পরিষ্কার করে তোলে।
- টেস্টের গতি বৃদ্ধি: shared resources ব্যবহার করার ফলে প্রতিটি টেস্টে একাধিকবার সেটআপ বা ডেটাবেস কাজ পুনরাবৃত্তি করতে হয় না, যা টেস্টিংয়ের গতি বৃদ্ধি করে।
- সহজ রক্ষণাবেক্ষণ: টেস্টের জন্য একাধিক রিসোর্স পরিবর্তন করতে হলে কেবল এক জায়গায় পরিবর্তন করা যায়, যা টেস্ট কোডের রক্ষণাবেক্ষণ সহজ করে তোলে।
৩. Shared Context এর ব্যবহারের সেরা প্র্যাকটিস
- শেয়ারড কনটেক্সট শুধুমাত্র সাধারণ প্রস্তুতির জন্য ব্যবহার করুন:
শেয়ারড কনটেক্সট ব্যবহার করার মূল উদ্দেশ্য হলো সাধারণ প্রস্তুতি ভাগ করা, যেমন ডেটাবেস রেকর্ড তৈরি বা ফাইল সেটআপ। এটি কোডকে সংগঠিত রাখতে সাহায্য করে। - সাম্প্রতিক টেস্টগুলি সহজে বুঝতে হবে:
শেয়ারড কনটেক্সট এবং শেয়ারড এক্সাম্পল ব্যবহারের সময় কোডের পাঠযোগ্যতা বজায় রাখা উচিত। কোডের মধ্যে কোথায় কী করা হচ্ছে তা যেন পরবর্তী সময়ে সহজে বোঝা যায়। - শেয়ারড কনটেক্সট ছোট এবং একক কাজের জন্য রাখুন:
কনটেক্সটগুলো ছোট এবং ফোকাসড রাখা উচিত। একাধিক কাজ একসঙ্গে রাখলে পরবর্তীতে সেটি অশুদ্ধ বা অস্পষ্ট হতে পারে।
৪. Shared Examples এর ব্যবহার
শেয়ারড এক্সাম্পল ব্যবহারের মাধ্যমে আপনি যদি একাধিক টেস্টে একই ধরনের আচরণ যাচাই করতে চান, তাহলে shared_examples ব্যবহার করা যায়।
উদাহরণ:
RSpec.shared_examples "একটি বৈধ মডেল" do
it "সঠিকভাবে তৈরি হবে" do
expect(model).to be_valid
end
it "নাম থাকতে হবে" do
model.name = nil
expect(model).to be_invalid
end
end
RSpec.describe User do
it_behaves_like "একটি বৈধ মডেল" do
let(:model) { User.new(name: "John") }
end
end
RSpec.describe Product do
it_behaves_like "একটি বৈধ মডেল" do
let(:model) { Product.new(name: "Laptop") }
end
endএখানে it_behaves_like ব্যবহার করা হয়েছে যাতে একাধিক মডেলের জন্য একই রকম টেস্ট করা যায়।
সারাংশ
Shared Resources বা Shared Context ব্যবহৃত হয় complex test cases এর জন্য কোড পুনঃব্যবহারযোগ্য এবং সংগঠিত করতে। RSpec এ shared examples এবং shared contexts টেস্টের কোড কমিয়ে সহজ, দ্রুত, এবং বেশি রক্ষণাবেক্ষণযোগ্য করে তোলে। তবে, সেগুলি ব্যবহার করার সময় সতর্ক থাকা উচিত যাতে কোড অতিরিক্ত জটিল না হয়ে পড়ে এবং টেস্টগুলির পাঠযোগ্যতা বজায় থাকে।
Read more