Shared Contexts এর মাধ্যমে Test Reusability বাড়ানো

Shared Examples এবং Shared Contexts (শেয়ার্ড এক্সাম্পলস এবং শেয়ার্ড কনটেক্সটস) - আরএসপেক (RSpec) - Computer Programming

269

RSpec-এ Shared Contexts একটি গুরুত্বপূর্ণ বৈশিষ্ট্য যা আপনাকে একাধিক টেস্টে পুনঃব্যবহারযোগ্য সেটআপ (setup) এবং সহায়ক কোড শেয়ার করতে দেয়। এর মাধ্যমে টেস্ট কোডের পুনঃব্যবহারযোগ্যতা (test reusability) বাড়ানো যায় এবং কোডের ড্রাই (DRY - Don't Repeat Yourself) প্রিন্সিপল অনুসরণ করা সহজ হয়।

Shared Contexts ব্যবহার করে আপনি সাধারণ কোড বা সেটআপ অংশ একাধিক টেস্টে শেয়ার করতে পারেন, যা টেস্ট লিখতে সময় বাঁচায় এবং কোডকে পরিষ্কার রাখে।


Shared Context কী?

Shared Context হল এমন একটি ব্লক যেখানে আপনি সাধারণ সেটআপ এবং ডেটা ইনিশিয়ালাইজেশন কোড লিখতে পারেন যা একাধিক টেস্টে পুনঃব্যবহারযোগ্য। RSpec এ এটি shared_context ব্লক ব্যবহার করে তৈরি করা হয়।

Shared Context ব্যবহার করার উপকারিতা

  • টেস্ট কোডের পুনঃব্যবহারযোগ্যতা বাড়ায়।
  • একাধিক টেস্টের মধ্যে কমন সেটআপ, ইনিশিয়ালাইজেশন বা ভেরিয়েবল শেয়ার করতে সাহায্য করে।
  • কোডের পুনরাবৃত্তি কমায় এবং কোড আরও পরিষ্কার এবং সহজে রক্ষণাবেক্ষণযোগ্য হয়।
  • একাধিক টেস্টে সাধারণ লজিক রাখতে সাহায্য করে।

Shared Context এর ব্যবহার

ধরা যাক, আমরা একটি ইনভয়েস ম্যানেজমেন্ট সিস্টেম তৈরি করছি এবং আমাদের অনেক টেস্টে একই কাস্টমার ডেটা প্রয়োজন। Shared Context ব্যবহার করে আমরা একে শুধুমাত্র একবার লিখে সব টেস্টে ব্যবহার করতে পারব।

১. Shared Context তৈরি করা

প্রথমে, আমরা একটি shared_context তৈরি করি যেখানে সাধারণ সেটআপ কোড থাকবে:

# spec/support/shared_contexts.rb

RSpec.shared_context "customer setup" do
  let(:customer) { Customer.create(name: "John Doe", email: "john@example.com") }
  let(:invoice) { Invoice.create(customer: customer, amount: 100) }
end

এখানে, আমরা customer এবং invoice অবজেক্ট তৈরি করেছি, যা একাধিক টেস্টে ব্যবহার করা হবে।

২. Shared Context ব্যবহার করা

এখন, আমরা আমাদের টেস্টে include_context ব্যবহার করে এই shared_context কে ইনক্লুড করব।

# spec/invoice_spec.rb
require 'rails_helper'

RSpec.describe Invoice, type: :model do
  include_context "customer setup"  # Shared context ব্যবহার

  it "should belong to a customer" do
    expect(invoice.customer).to eq(customer)  # invoice-এর customer সঠিক কিনা পরীক্ষা
  end

  it "should have the correct amount" do
    expect(invoice.amount).to eq(100)  # invoice-এর amount সঠিক কিনা পরীক্ষা
  end
end

এখানে, আমরা include_context ব্যবহার করে customer setup কন্টেক্সটটি টেস্টে ইনক্লুড করেছি, যাতে customer এবং invoice ভেরিয়েবলগুলি টেস্টে স্বয়ংক্রিয়ভাবে উপলব্ধ হয়।

৩. আরেকটি টেস্ট ফাইলেও ব্যবহার

একই Shared Context আমরা অন্য একটি টেস্ট ফাইলে ব্যবহার করতে পারি:

# spec/order_spec.rb
require 'rails_helper'

RSpec.describe Order, type: :model do
  include_context "customer setup"  # Shared context ব্যবহার

  it "should create an order for the customer" do
    order = Order.create(customer: customer, total: 200)
    expect(order.customer).to eq(customer)  # order-এর customer সঠিক কিনা পরীক্ষা
    expect(order.total).to eq(200)         # order-এর total সঠিক কিনা পরীক্ষা
  end
end

এখানে, customer setup কন্টেক্সটটি অন্য একটি টেস্ট ফাইলেও ব্যবহার করা হয়েছে, এবং আমরা একই customer এবং invoice অবজেক্টগুলি আবার পুনরায় তৈরি না করে ব্যবহার করতে পারছি।


Advanced: Shared Examples

এছাড়াও, RSpec এ Shared Examples নামে একটি বৈশিষ্ট্যও আছে, যা আরও সাধারণ টেস্ট কাঠামো তৈরি করতে সহায়ক। উদাহরণস্বরূপ, যদি আপনি বিভিন্ন মডেল বা ক্লাসের জন্য একই ধরনের পরীক্ষা করতে চান, তবে Shared Examples ব্যবহার করতে পারেন।

# spec/support/shared_examples.rb

RSpec.shared_examples "a valid customer" do
  it "has a valid name" do
    expect(customer.name).to be_present
  end

  it "has a valid email" do
    expect(customer.email).to match(/\A[^@\s]+@[^@\s]+\z/)
  end
end

এখন, এই শেয়ার্ড এক্সাম্পলটি বিভিন্ন টেস্ট ফাইলে ব্যবহার করা যাবে:

# spec/customer_spec.rb
require 'rails_helper'

RSpec.describe Customer, type: :model do
  let(:customer) { Customer.create(name: "John Doe", email: "john@example.com") }

  include_examples "a valid customer"
end

এইভাবে, আপনি একাধিক টেস্টে কমন টেস্ট লজিক শেয়ার করতে পারেন এবং ডুপ্লিকেট কোড এড়াতে পারেন।


সারাংশ

Shared Context এর মাধ্যমে RSpec-এ কোডের পুনঃব্যবহারযোগ্যতা বৃদ্ধি করা যায় এবং টেস্ট লেখা আরও সহজ এবং কার্যকর হয়। এটি একাধিক টেস্টে সাধারণ সেটআপ বা ডেটা শেয়ার করতে সাহায্য করে, এবং কোডের ড্রাই (DRY) প্রিন্সিপল অনুসরণে সহায়ক। এছাড়াও, Shared Examples এর মাধ্যমে বিভিন্ন ধরনের টেস্টে সাধারণ আচরণ পরীক্ষাও করা যায়।

Content added By
Promotion

Are you sure to start over?

Loading...