RSpec একটি শক্তিশালী টেস্টিং ফ্রেমওয়ার্ক, এবং এটি কনফিগারেশন এবং কাস্টমাইজেশন করার মাধ্যমে আরও ব্যবহারবান্ধব এবং কার্যকর করা যায়। এর মাধ্যমে আপনি টেস্ট রানিং, আউটপুট, এবং অন্যান্য সেটিংস নিয়ন্ত্রণ করতে পারেন। নিচে RSpec কনফিগারেশন এবং কাস্টমাইজেশন সংক্রান্ত কিছু গুরুত্বপূর্ণ ধারণা এবং উদাহরণ দেওয়া হলো।
১. RSpec কনফিগারেশন (Configuration)
RSpec কনফিগারেশন সাধারণত spec_helper.rb ফাইলে করা হয়। এটি টেস্ট রান করার সময় বিভিন্ন সেটিংস কাস্টমাইজ করতে সাহায্য করে, যেমন আউটপুট ফরম্যাট, রঙ, টেস্ট চলার আগে বা পরে কিছু কোড চালানো, ইত্যাদি।
spec_helper.rb ফাইলের কিছু সাধারণ কনফিগারেশন:
- রঙিন আউটপুট: টেস্টের আউটপুটকে রঙিন করতে
colorসেট করা হয়। - ডকুমেন্টেশন ফরম্যাট: টেস্টের আউটপুটকে আরও পঠনযোগ্য এবং বোধগম্য করতে
documentationফরম্যাট ব্যবহার করা হয়। - টেস্টের আগে এবং পরে কিছু কোড চালানো:
before(:each)বাafter(:each)ব্লক ব্যবহার করে প্রতিটি টেস্টের আগে বা পরে কিছু কোড চালানো হয়।
উদাহরণ: spec_helper.rb কনফিগারেশন
# spec/spec_helper.rb
RSpec.configure do |config|
# রঙিন আউটপুট সক্রিয় করা
config.color = true
# আউটপুট ফরম্যাট ডকুমেন্টেশনে পরিবর্তন করা
config.formatter = :documentation
# প্রতিটি টেস্টের আগে কিছু কোড চালানো
config.before(:each) do
puts "প্রতিটি টেস্টের আগে চালানো হবে"
end
# প্রতিটি টেস্টের পরে কিছু কোড চালানো
config.after(:each) do
puts "প্রতিটি টেস্টের পরে চালানো হবে"
end
# ব্যবহারযোগ্য মক তৈরি
config.mock_with :rspec
endএখানে:
config.color = true: আউটপুটে রঙ ব্যবহার করা।config.formatter = :documentation: আউটপুটকে ডকুমেন্টেশন ফরম্যাটে সাজানো।config.before(:each)এবংconfig.after(:each): প্রতিটি টেস্টের আগে এবং পরে কোড চালানো।
২. Custom Matchers তৈরি করা
RSpec আপনাকে কাস্টম ম্যাচার তৈরি করতে দেয়, যা আপনার নিজস্ব পরীক্ষার পদ্ধতি তৈরি করতে সাহায্য করে। কাস্টম ম্যাচার ব্যবহার করলে আপনি আরও সুনির্দিষ্ট এবং পরিষ্কার টেস্ট লিখতে পারবেন।
কাস্টম ম্যাচার উদাহরণ:
ধরা যাক, আপনি একটি কাস্টম ম্যাচার তৈরি করতে চান যা পরীক্ষা করবে যে একটি অ্যারে শুধু পজিটিভ সংখ্যা ধারণ করে কি না।
# spec/support/matchers/only_positive.rb
RSpec::Matchers.define :only_contain_positive_numbers do
match do |actual|
actual.all? { |n| n > 0 }
end
endএখানে:
RSpec::Matchers.define: কাস্টম ম্যাচার তৈরি করা।match: এই মেথডের মাধ্যমে আপনি কাস্টম ম্যাচারের লজিক লিখবেন।
টেস্ট কোড:
# spec/array_spec.rb
require './spec/support/matchers/only_positive'
describe "Array" do
it "contains only positive numbers" do
expect([1, 2, 3]).to only_contain_positive_numbers
end
it "does not contain only positive numbers" do
expect([-1, 2, 3]).not_to only_contain_positive_numbers
end
endএখানে, প্রথম টেস্টটি পরীক্ষা করবে যে অ্যারে শুধু পজিটিভ সংখ্যা ধারণ করে, এবং দ্বিতীয়টি নিশ্চিত করবে যে অ্যারে শুধুমাত্র পজিটিভ সংখ্যা ধারণ করে না।
৩. Shared Context এবং Shared Examples ব্যবহার
RSpec আপনাকে Shared Context এবং Shared Examples ব্যবহার করার সুযোগ দেয়, যা একাধিক টেস্টে পুনরায় ব্যবহারযোগ্য কোড তৈরি করতে সাহায্য করে।
উদাহরণ: Shared Context
# spec/support/shared_contexts.rb
RSpec.shared_context "shared setup" do
before(:each) do
@shared_value = "This is shared"
end
endএখন, আপনি এই কনটেক্সটটি আপনার টেস্টে ব্যবহার করতে পারেন:
# spec/sample_spec.rb
require './spec/support/shared_contexts'
describe "Using shared context" do
include_context "shared setup"
it "uses the shared value" do
expect(@shared_value).to eq("This is shared")
end
endউদাহরণ: Shared Examples
# spec/support/shared_examples.rb
RSpec.shared_examples "a testable model" do
it "responds to name" do
expect(subject).to respond_to(:name)
end
endএখন, এই শেয়ার্ড এক্সাম্পলটি আপনি অন্য টেস্টে ব্যবহার করতে পারেন:
# spec/user_spec.rb
require './spec/support/shared_examples'
describe User do
it_behaves_like "a testable model"
endএখানে, User মডেলটি শেয়ার্ড এক্সাম্পল "a testable model" ব্যবহার করে পরীক্ষা করা হয়েছে।
৪. RSpec প্লাগইন ব্যবহার করা
RSpec-এ বিভিন্ন ধরনের প্লাগইন ব্যবহার করা যায়, যা টেস্টিংয়ের সময় আরও ফিচার যোগ করতে সাহায্য করে।
জনপ্রিয় RSpec প্লাগইন:
- FactoryBot: ডাটাবেসে ডামি ডেটা তৈরি করার জন্য।
- Faker: র্যান্ডম ডেটা তৈরি করার জন্য।
- Capybara: ওয়েব অ্যাপ্লিকেশন টেস্টিংয়ের জন্য।
উদাহরণ: FactoryBot ব্যবহার
# Gemfile
gem 'factory_bot_rails'এখন, আপনি একটি ফ্যাক্টরি তৈরি করতে পারেন:
# spec/factories/users.rb
FactoryBot.define do
factory :user do
name { "John Doe" }
email { "john.doe@example.com" }
end
endটেস্ট কোড:
# spec/models/user_spec.rb
require 'factory_bot'
describe User do
it "creates a user using FactoryBot" do
user = FactoryBot.create(:user)
expect(user.name).to eq("John Doe")
end
endসারাংশ
RSpec এর কনফিগারেশন এবং কাস্টমাইজেশন আপনার টেস্টিং পরিবেশকে আরও উন্নত এবং ব্যবহারবান্ধব করে তোলে। আপনি spec_helper.rb ফাইলের মাধ্যমে RSpec কনফিগারেশন করতে পারেন, কাস্টম ম্যাচার তৈরি করে টেস্টিংকে আরও সুনির্দিষ্ট করতে পারেন, এবং Shared Context এবং Shared Examples ব্যবহার করে পুনরায় ব্যবহারযোগ্য কোড তৈরি করতে পারেন। RSpec এর প্লাগইন ব্যবহারের মাধ্যমে আরও শক্তিশালী টেস্টিং ফিচার যোগ করা সম্ভব।
RSpec কনফিগারেশন ফাইলের মাধ্যমে আপনি টেস্টিং পরিবেশ কাস্টমাইজ করতে পারেন। এই কনফিগারেশন ফাইলটি .rspec নামে পরিচিত এবং এটি প্রজেক্টের রুট ডিরেক্টরিতে রাখা হয়। .rspec ফাইলটির মধ্যে আপনি বিভিন্ন কনফিগারেশন অপশন নির্ধারণ করতে পারেন, যা RSpec টেস্টিং চলাকালীন কাজ করবে।
.rspec ফাইলের কনফিগারেশন অপশন
১. ডিফল্ট আর্গুমেন্ট সেট করা
.rspec ফাইলে আপনি RSpec এর ডিফল্ট আর্গুমেন্ট এবং টেস্টের আউটপুট কনফিগার করতে পারেন। কিছু সাধারণ কনফিগারেশন হলো:
--color # আউটপুটে রঙের ব্যবহার
--format documentation # আউটপুট ফরম্যাট
--require spec_helper # `spec_helper.rb` ফাইলটি লোড করা--color: এটি আউটপুটে রঙ যোগ করে, যা টেস্টের পাস ও ফেল স্টেটাস পরিষ্কারভাবে দেখায়।--format documentation: এই অপশনটি আউটপুটের স্টাইলকে ডকুমেন্টেশন স্টাইলে পরিবর্তন করে, যেখানে প্রতিটি টেস্টের বিস্তারিত আউটপুট দেখা যাবে।--require spec_helper: এটিspec_helper.rbফাইলটি লোড করে, যেখানে আপনি আপনার রেসপেক্টিভ কনফিগারেশন এবং সাধারণ সেটআপ নির্ধারণ করেন।
উদাহরণ:
--color
--format documentation
--require spec_helper.rspec ফাইলের আরো কিছু কনফিগারেশন
২. পূর্ববর্তী টেস্টের আউটপুট পরিষ্কার করা
যদি আপনি আগের টেস্টের ফলাফল বা আউটপুট পরিষ্কার রাখতে চান, তাহলে --no-diff অপশন ব্যবহার করতে পারেন:
--no-diffএটি টেস্টের আউটপুটে কোনো ফাইল বা ডাটা পরিবর্তনের পার্থক্য দেখাবে না।
৩. টেস্টের বর্ধিত সময়সীমা
আপনি যদি টেস্টের সময়সীমা বাড়াতে চান (যেমন, দীর্ঘ সময় ধরে চলা টেস্টের জন্য), তাহলে --max-iterations অপশন ব্যবহার করতে পারেন:
--max-iterations 100এটি RSpec কে 100 বার টেস্ট চালানোর জন্য বলবে।
৪. পাস হওয়া টেস্টের স্যাম্পল আউটপুট
Rspec এর --examples অপশনটি ব্যবহার করলে শুধুমাত্র পাস হওয়া টেস্টগুলির জন্য আউটপুট দেখাবে:
--examples "Specific Test".rspec কনফিগারেশন ফাইলের উদাহরণ
--color
--format documentation
--require spec_helper
--max-iterations 100
--no-diffএই কনফিগারেশনটি ব্যবহার করার মাধ্যমে আপনি:
- রঙিন আউটপুট পাবেন।
- ডকুমেন্টেশন স্টাইল আউটপুট পাবেন।
- spec_helper.rb ফাইলটি প্রতিবার টেস্ট রান করার সময় লোড হবে।
- 100 বার টেস্ট চালানো হবে যদি কোনো টেস্টের জন্য সেট করা থাকে।
- ফাইল পার্থক্য দেখানো হবে না।
.rspec ফাইলের মাধ্যমে রেসপেক্টিভ কনফিগারেশন ব্যবহারের সুবিধা
- সহজ কাস্টমাইজেশন: আপনি খুব সহজেই
.rspecফাইলের মাধ্যমে RSpec এর কনফিগারেশন এবং আউটপুট ফরম্যাট কাস্টমাইজ করতে পারবেন। - ডিফল্ট টেস্টিং পরিবেশ: এটি আপনার প্রজেক্টে একটি একক কনফিগারেশন সেটআপ তৈরি করে, যার মাধ্যমে টেস্ট চলানোর সময় একরকম পরিবেশ থাকে।
- সহজ রক্ষণাবেক্ষণ: একবার কনফিগারেশন সেটআপ করা হলে, এটি পুরো প্রজেক্টে প্রযোজ্য হবে, ফলে রক্ষণাবেক্ষণ সহজ হয়।
সারাংশ
.rspec ফাইলটি RSpec এর কনফিগারেশন সেটআপ করার জন্য ব্যবহৃত হয়। এতে আপনি আউটপুট ফরম্যাট, রঙের ব্যবহার, spec_helper.rb ফাইল লোড এবং অন্যান্য কনফিগারেশন নির্ধারণ করতে পারেন। .rspec ফাইলটি আপনার টেস্টিং পরিবেশে একীভূত কনফিগারেশন তৈরি করতে সাহায্য করে, যাতে আপনি প্রতিবার RSpec রান করার সময় একই কনফিগারেশন ব্যবহার করতে পারেন।
RSpec এ Custom Formatter তৈরি করার মাধ্যমে আপনি আপনার টেস্ট রান আউটপুট কাস্টমাইজ করতে পারেন, যেমন টেস্টের ফলাফল, পরিসংখ্যান বা অন্যান্য কাস্টম ডেটা প্রদর্শন। এটি একটি টেস্টিং রিপোর্ট তৈরি করতে সাহায্য করে যা আপনার টেস্ট প্রক্রিয়া বুঝতে বা বিশ্লেষণ করতে সহায়ক হতে পারে।
RSpec-এ একটি Custom Formatter তৈরি করার জন্য আপনাকে Formatter ক্লাসটি এক্সটেন্ড (extend) করতে হবে এবং RSpec টেস্ট রান করার সময় এই Formatter কাস্টমাইজড আউটপুট তৈরি করতে ব্যবহার করতে হবে।
Custom Formatter তৈরি
একটি Custom Formatter তৈরি করতে হলে আপনাকে কিছু পদক্ষেপ অনুসরণ করতে হবে। এখানে একটি উদাহরণ দেওয়া হলো।
১. Formatter ক্লাস তৈরি
প্রথমে একটি ক্লাস তৈরি করুন যা RSpec এর RSpec::Core::Formatters::BaseFormatter থেকে ইনহেরিট করবে। এতে আপনি কাস্টম আউটপুটের জন্য মেথডগুলি ডিফাইন করবেন।
# spec/formatters/custom_formatter.rb
require 'rspec/core/formatters/base_formatter'
class CustomFormatter < RSpec::Core::Formatters::BaseFormatter
def initialize(output)
super(output)
@test_count = 0
@failure_count = 0
end
def example_started(example)
@test_count += 1
end
def example_failed(example)
@failure_count += 1
end
def example_passed(example)
# Successful test can be handled here (optional)
end
def close
output.puts "Total Tests: #{@test_count}"
output.puts "Total Failures: #{@failure_count}"
output.puts "Tests Passed: #{@test_count - @failure_count}"
end
endএই উদাহরণে, আমরা একটি Custom Formatter তৈরি করেছি যা মোট টেস্ট সংখ্যা, ফেইল হওয়া টেস্টের সংখ্যা এবং পাস হওয়া টেস্টের সংখ্যা প্রদর্শন করবে।
২. Custom Formatter ব্যবহার
এখন আপনাকে RSpec রান করার সময় আপনার কাস্টম ফরম্যাটারটি ব্যবহার করতে হবে। এটি করতে আপনি --format অপশন ব্যবহার করবেন এবং আপনার কাস্টম ফরম্যাটার ফাইলটির পাথ দিতে হবে।
rspec --format CustomFormatter --out result.txtএখানে --format এর মাধ্যমে আপনার কাস্টম ফরম্যাটারটি নির্দেশ করা হয়েছে এবং --out অপশন ব্যবহার করে আউটপুটটিকে একটি ফাইলে সংরক্ষণ করা হয়েছে।
৩. RSpec কনফিগারেশন ফাইলে Formatter যুক্ত করা
আপনি যদি রবারি ইন্টারফেসের মাধ্যমে (CLI এর বাইরে) RSpec ফরম্যাটারটি ব্যবহার করতে চান, তবে এটি spec_helper.rb অথবা rails_helper.rb ফাইলে কনফিগার করে দিতে পারেন।
# spec/spec_helper.rb
RSpec.configure do |config|
config.add_formatter CustomFormatter
endএই কনফিগারেশনটি আপনার টেস্ট রান করার সময় স্বয়ংক্রিয়ভাবে কাস্টম ফরম্যাটার ব্যবহার করবে।
Custom Formatter এর সুবিধা
- বিশদ রিপোর্ট: আপনি কাস্টম ফরম্যাটারের মাধ্যমে টেস্টের ফলাফল, পাস ও ফেইল সংখ্যা, সময়, এবং আরও অনেক কিছু কাস্টম আউটপুট হিসেবে পেতে পারেন।
- বিশ্লেষণ সহজ করা: টেস্ট রিপোর্টটি আপনি নির্দিষ্টভাবে কাস্টমাইজ করতে পারেন যাতে আপনার দলের জন্য পরীক্ষার ফলাফল সহজে বিশ্লেষণ করা যায়।
- ডেটা সঞ্চয়: পরীক্ষার ফলাফল, ত্রুটি বা সতর্কতাগুলি ফাইলে রেকর্ড করে রেখে পরে ডেটা বিশ্লেষণ করা যায়।
সারাংশ
RSpec এ Custom Formatter তৈরি এবং ব্যবহার করে আপনি আপনার টেস্ট রান আউটপুট কাস্টমাইজ করতে পারেন। এটি আপনাকে কাস্টম রিপোর্ট তৈরি করার সুযোগ দেয়, যা আপনার টেস্ট ফলাফল বিশ্লেষণ এবং পর্যালোচনায় সহায়ক। একটি কাস্টম ফরম্যাটার তৈরি করতে RSpec::Core::Formatters::BaseFormatter ক্লাসটি ইনহেরিট করতে হয় এবং নির্দিষ্ট মেথডগুলো কাস্টমাইজ করতে হয় যেমন example_started, example_failed, এবং close।
RSpec-এ টেস্টের অর্ডার এবং সিডিং (Seeding) ব্যবহারের মাধ্যমে আপনি আপনার টেস্টগুলির চলমানতা এবং নির্ভরযোগ্যতা নিয়ন্ত্রণ করতে পারেন। কিছু সময়, টেস্টগুলির কার্যকারিতা একে অপরের উপর নির্ভর করতে পারে এবং সেগুলোর সঠিকভাবে চলার জন্য নির্দিষ্ট অর্ডারে থাকতে হবে। তবে, যখন আপনি নিশ্চিত করতে চান যে আপনার টেস্টগুলো বিভিন্ন অর্ডারে সঠিকভাবে কাজ করছে, তখন Random Test Order এবং Seed এর ব্যবহার গুরুত্বপূর্ণ হয়ে ওঠে।
Random Test Order
Random Test Order ব্যবহার করার মাধ্যমে আপনি আপনার টেস্টগুলোকে এলোমেলোভাবে চালাতে পারেন। এর মাধ্যমে, আপনি যাচাই করতে পারেন যে আপনার কোড এবং টেস্টগুলি অর্ডার নির্ভর নয় এবং একে অপরের উপর নির্ভর না করে কাজ করছে। এই পদ্ধতির মাধ্যমে কোনো নির্দিষ্ট টেস্টে কিছু অস্বাভাবিক আচরণ শনাক্ত করা সহজ হয়, যেগুলি সাধারণত নির্দিষ্ট অর্ডারে রান করালে দেখা যায় না।
Random Test Order চালানো:
RSpec ডিফল্টভাবে টেস্টগুলিকে র্যান্ডম অর্ডারে চালাতে সক্ষম নয়, তবে আপনি এই ফিচারটি চালু করতে পারেন।
# spec/rails_helper.rb বা spec/spec_helper.rb ফাইলে নিম্নলিখিত কোডটি যোগ করুন
RSpec.configure do |config|
config.order = 'random' # র্যান্ডম অর্ডারে টেস্ট রান করবে
endএখন, যখন আপনি টেস্ট চালাবেন, RSpec টেস্টগুলো এলোমেলোভাবে রান করবে।
টেস্টের এলোমেলো অর্ডারে চালানোর সুবিধা:
- কনফিগারেশন এবং ইন্টিগ্রেশন ত্রুটি শনাক্ত: র্যান্ডম অর্ডারে টেস্ট রান করলে আপনি দেখতে পারবেন, কোনো টেস্ট অন্য টেস্টের উপর নির্ভরশীল না কি না।
- বিশ্বস্ততা বৃদ্ধি: কোডের স্থিতিস্থাপকতা এবং নির্ভরশীলতা পরীক্ষা করা সহজ হয়, কারণ কিছু টেস্ট যদি অন্য টেস্টের ফলাফলের উপর নির্ভর করে, তাহলে তা র্যান্ডম অর্ডারে হালকা ত্রুটি সৃষ্টি করতে পারে।
Seed ব্যবহার
Seed ব্যবহার করার মাধ্যমে আপনি র্যান্ডম অর্ডারের সাথে একটি নির্দিষ্ট পুনরাবৃত্তি (repetition) করতে পারেন। Seed মানের মাধ্যমে আপনি সেই অর্ডারটি পুনরায় চালাতে পারেন, যাতে একই অর্ডারে টেস্টগুলি আবার রান করে এবং ফলাফল পুনরায় যাচাই করতে পারেন। যদি আপনি র্যান্ডম অর্ডার ব্যবহার করছেন এবং পরবর্তী সময়ে একই অর্ডারটি পুনরায় চালাতে চান, তখন --seed ফ্ল্যাগ ব্যবহার করতে পারেন।
Seed ব্যবহার:
আপনি যখন --seed ব্যবহার করে টেস্ট চালান, এটি একই র্যান্ডম অর্ডার নিশ্চিত করবে যেটি পূর্বে ছিল। উদাহরণ:
rspec --seed 1234এতে 1234 নাম্বারের seed ব্যবহার করে টেস্টগুলো চালানো হবে। যদি আপনি একই সিড ব্যবহার করেন, তবে টেস্টের অর্ডার একই থাকবে।
Seed ব্যবহার করে র্যান্ডম অর্ডার টেস্ট চালানো:
rspec --seed 1234এখন, যখন আপনি আবার একই সিড ব্যবহার করবেন, টেস্টগুলির অর্ডার এবং ফলাফল এক হবে, যেহেতু আপনি সেই সিডে একই র্যান্ডম অর্ডার পুনরায় সেট করেছেন।
Random Test Order এবং Seed এর সুবিধা
- সহজ ডিবাগিং: এলোমেলো অর্ডারে টেস্ট রান করালে, আপনি দ্রুত ত্রুটি শনাক্ত করতে পারবেন যা শুধুমাত্র নির্দিষ্ট অর্ডারে ঘটতে পারে।
- বিশ্বস্ততা নিশ্চিতকরণ: যদি আপনার টেস্টগুলি একে অপরের উপর নির্ভরশীল না হয়, তবে সেটি র্যান্ডম অর্ডারে সঠিকভাবে কাজ করবে, যা কোডের স্থিতিস্থাপকতা নিশ্চিত করে।
- সঠিক ফলাফল:
--seedব্যবহার করে, আপনি সেই একই টেস্টের অর্ডার পুনরায় চালাতে পারবেন এবং ফলাফল নিশ্চিত করতে পারবেন।
সারাংশ
Random Test Order এবং Seed RSpec-এ টেস্টের কার্যকারিতা নিশ্চিত করতে সহায়ক। Random Test Order টেস্টগুলোকে এলোমেলোভাবে চালাতে সাহায্য করে, যা কোডের নির্ভরশীলতা এবং স্থিতিস্থাপকতা নিশ্চিত করে। অন্যদিকে, Seed ব্যবহার করে আপনি একই র্যান্ডম অর্ডার পুনরায় চালাতে পারবেন এবং নির্দিষ্ট ফলাফল পুনরায় যাচাই করতে পারবেন। এই দুটি ফিচার আপনার কোডের গুণগত মান এবং ডিবাগিং প্রক্রিয়া উন্নত করে।
RSpec-এ আপনি কাস্টম আউটপুট ফরম্যাট তৈরি করতে পারেন যাতে টেস্টের ফলাফলগুলি আপনার নির্দিষ্ট প্রয়োজন অনুযায়ী উপস্থাপিত হয়। RSpec-এ আউটপুট ফরম্যাটের ডিফল্ট সিস্টেমটি হলো ফরম্যাটার (Formatter), যা টেস্ট পাস বা ফেল সম্পর্কে তথ্য প্রদর্শন করে। তবে আপনি যদি টেস্ট ফলাফলের জন্য একটি কাস্টম আউটপুট চান, তাহলে কাস্টম ফরম্যাটার ব্যবহার করতে পারেন।
কাস্টম ফরম্যাটারের ধারণা
RSpec একটি formatter কনসেপ্ট প্রদান করে যা আউটপুটের লেআউট এবং স্টাইল কাস্টমাইজ করতে সহায়ক। আপনি আউটপুটের জন্য একটি নিজস্ব ফরম্যাটার তৈরি করে, যা আপনার টেস্ট রান করার সময় ফলাফলকে নির্দিষ্ট ফরম্যাটে দেখাতে পারে।
কাস্টম আউটপুট ফরম্যাটার তৈরি করা
একটি কাস্টম আউটপুট ফরম্যাটার তৈরি করতে, আপনাকে RSpec-এর ফরম্যাটার API ব্যবহার করতে হবে। নিচে কাস্টম আউটপুট ফরম্যাটার তৈরি করার একটি উদাহরণ দেখানো হয়েছে।
১. কাস্টম আউটপুট ফরম্যাটার ক্লাস তৈরি
প্রথমে, একটি নতুন Ruby ক্লাস তৈরি করতে হবে যা RSpec::Core::Formatters::BaseFormatter ক্লাস থেকে ইনহেরিট করবে। এই ক্লাসের মধ্যে আউটপুট প্রদর্শন করার জন্য বিভিন্ন মেথড প্রয়োগ করা হয়।
# custom_formatter.rb
require 'rspec/core/formatters/base_formatter'
class CustomFormatter < RSpec::Core::Formatters::BaseFormatter
# টেস্ট শুরু হওয়ার সময় কল হবে
def start(example_count)
output.puts "টেস্ট রান শুরু হচ্ছে: #{example_count}টি টেস্ট"
end
# প্রতিটি টেস্টের ফলাফল দেখাবে
def example_passed(passed)
output.puts "✔️ #{passed.description} সফল"
end
def example_failed(failed)
output.puts "❌ #{failed.description} ব্যর্থ"
end
# টেস্ট শেষে সার্বিক ফলাফল দেখাবে
def stop
output.puts "টেস্ট রান শেষ"
end
endএই ক্লাসে:
start: টেস্ট শুরু হওয়ার সময় মোট টেস্ট সংখ্যা দেখায়।example_passed: প্রতিটি সফল টেস্টের পরে "✔️" চিহ্ন এবং টেস্টের বর্ণনা প্রদর্শন করে।example_failed: প্রতিটি ব্যর্থ টেস্টের পরে "❌" চিহ্ন এবং ব্যর্থ টেস্টের বর্ণনা প্রদর্শন করে।stop: সব টেস্টের শেষে একটি সমাপ্তি বার্তা প্রদর্শন করে।
২. কাস্টম ফরম্যাটার ব্যবহার করা
এরপর, rspec কমান্ডে কাস্টম ফরম্যাটার ব্যবহারের জন্য এটি কনফিগার করতে হবে। আপনি এটি rspec কমান্ড লাইনের মাধ্যমে বা RSpec কনফিগারেশন ফাইলে (যেমন spec_helper.rb বা rails_helper.rb) সেটআপ করতে পারেন।
কমান্ড লাইনে ব্যবহার:
rspec --format CustomFormatterRSpec কনফিগারেশন ফাইলে ব্যবহার:
# spec/spec_helper.rb
RSpec.configure do |config|
config.add_formatter 'CustomFormatter'
endএখন, যখন আপনি rspec রান করবেন, এটি আপনার কাস্টম ফরম্যাটারের আউটপুট প্রদর্শন করবে।
কাস্টম আউটপুট ফরম্যাটারের আরও উন্নত ফিচার
- টেস্ট সময়: আপনি টেস্ট চলাকালীন সময়ও আউটপুটে যোগ করতে পারেন।
- ফলাফল স্টাইল: আপনি JSON, HTML বা অন্য কোনো ফরম্যাটে আউটপুট জেনারেট করতে পারেন।
- ফাইল আউটপুট: টেস্ট ফলাফল একটি ফাইলে রেকর্ড করতে চাইলে আউটপুটটিকে একটি ফাইলে লেখার জন্য
output.putsএর পরিবর্তেFile.openব্যবহার করতে পারেন।
উদাহরণ: টেস্ট ফলাফল JSON ফরম্যাটে আউটপুট করা
class JsonFormatter < RSpec::Core::Formatters::BaseFormatter
def start(example_count)
@results = { "total_tests" => example_count, "results" => [] }
end
def example_passed(passed)
@results["results"] << { "example" => passed.description, "status" => "passed" }
end
def example_failed(failed)
@results["results"] << { "example" => failed.description, "status" => "failed", "message" => failed.exception.message }
end
def stop
File.open("test_results.json", "w") { |f| f.write(@results.to_json) }
end
endএই কোডটি টেস্ট ফলাফল JSON ফরম্যাটে test_results.json ফাইলে সংরক্ষণ করবে।
সারাংশ
RSpec-এ কাস্টম আউটপুট ফরম্যাট তৈরি করা খুবই সহজ এবং এটি আপনাকে টেস্ট ফলাফল কাস্টমাইজ করার জন্য বিভিন্ন সুবিধা প্রদান করে। আপনি RSpec-এর ফরম্যাটার API ব্যবহার করে আপনার নিজস্ব আউটপুট ফরম্যাট তৈরি করতে পারেন, যা টেস্টের ফলাফলকে আপনার নির্দিষ্ট প্রয়োজন অনুসারে উপস্থাপন করবে।
Read more