আপনি যে পদ্ধতিটি পেয়েছেন সেটি অবশ্যই কিছুটা কার্যকারিতা পরীক্ষা করার জন্য কাজ করবে তবে বেশ ভঙ্গুর বলে মনে হচ্ছে — আপনার ডামি ক্লাস (আসলে Struct
আপনার সমাধানের মধ্যে একটি ) সম্ভবত একটি বাস্তব শ্রেণীর মতো আচরণ করতে পারে বা নাও পারেinclude
আপনার উদ্বেগের । অতিরিক্ত হিসাবে আপনি যদি মডেল উদ্বেগগুলি পরীক্ষা করার চেষ্টা করছেন, আপনি সেই অনুযায়ী ডেটাবেস সেট আপ না করে অবজেক্টের বৈধতা পরীক্ষা করতে বা অ্যাক্টিভেকর্ড কলব্যাকের অনুরোধ করার মতো জিনিসগুলি করতে সক্ষম হবেন না (কারণ আপনার ডামি ক্লাসে ডেটাবেস টেবিলের ব্যাকিং থাকবে না) এটা)। তদুপরি, আপনি কেবল উদ্বেগকেই পরীক্ষা করতে চান না বরং আপনার মডেল চশমাগুলির মধ্যে উদ্বেগের আচরণটিও পরীক্ষা করতে চান।
তাহলে এক পাথর দিয়ে দুটি পাখি মারবে না কেন? আরএসপেকের ভাগ করা উদাহরণ গ্রুপগুলি ব্যবহার করে , আপনি তাদের উদ্বেগকে প্রকৃত শ্রেণিগুলির বিরুদ্ধে পরীক্ষা করতে পারেন যা সেগুলি ব্যবহার করে (উদাহরণস্বরূপ, মডেলগুলি) এবং আপনি যে কোনও জায়গাতেই ব্যবহার করেন সেগুলি পরীক্ষা করতে সক্ষম হবেন। এবং আপনাকে কেবল একবার পরীক্ষাগুলি লিখতে হবে এবং তারপরে সেগুলি কেবল আপনার উদ্বেগকে ব্যবহার করে এমন কোনও মডেলের ক্ষেত্রে অন্তর্ভুক্ত করবে। আপনার ক্ষেত্রে, এটি দেখতে এর মতো কিছু হতে পারে:
# app/models/concerns/personable.rb
module Personable
extend ActiveSupport::Concern
def full_name
"#{first_name} #{last_name}"
end
end
# spec/concerns/personable_spec.rb
require 'spec_helper'
shared_examples_for "personable" do
let(:model) { described_class } # the class that includes the concern
it "has a full name" do
person = FactoryBot.build(model.to_s.underscore.to_sym, first_name: "Stewart", last_name: "Home")
expect(person.full_name).to eq("Stewart Home")
end
end
# spec/models/master_spec.rb
require 'spec_helper'
require Rails.root.join "spec/concerns/personable_spec.rb"
describe Master do
it_behaves_like "personable"
end
# spec/models/apprentice_spec.rb
require 'spec_helper'
describe Apprentice do
it_behaves_like "personable"
end
আপনি যখন এআর কলব্যাকগুলি শুরু করার মতো আপনার উদ্বেগের কাজগুলি শুরু করেন তখন এই পদ্ধতির সুবিধাগুলি আরও স্পষ্ট হয়ে ওঠে, যেখানে কোনও আর এজেটের চেয়ে কম কিছু করা সম্ভব হয় না।