অন্যান্য ব্যবহারকারী তৈরি করার সময় আফটার_সেভ কলব্যাককে আরও পুনরায় ব্যবহারযোগ্য করে তুলতে আমি @ লুইজব্র্যাঙ্কোর জবাবকে আরও উন্নত করতে চাই।
FactoryGirl.define do
factory :user do
first_name "Luiz"
last_name "Branco"
#...
after(:build) { |user|
user.class.skip_callback(:create,
:after,
:run_something1,
:run_something2)
}
trait :with_after_save_callback do
after(:build) { |user|
user.class.set_callback(:create,
:after,
:run_something1,
:run_something2)
}
end
end
end
আফটার_সেভ কলব্যাক ছাড়াই চলছে:
FactoryGirl.create(:user)
আফটার_সেভ কলব্যাক দিয়ে চলছে:
FactoryGirl.create(:user, :with_after_save_callback)
আমার পরীক্ষায়, আমি ডিফল্টরূপে কলব্যাক ছাড়াই ব্যবহারকারী তৈরি করতে পছন্দ করি কারণ যে পদ্ধতিগুলি ব্যবহার করা হয় সেগুলি অতিরিক্ত স্টাফ চালায় যা আমি সাধারণত আমার পরীক্ষার উদাহরণগুলিতে চাই না।
---------- আপডেট ------------ আমি স্কিপ_ক্যালব্যাক ব্যবহার বন্ধ করে দিয়েছি কারণ পরীক্ষার স্যুটটিতে কিছু অসঙ্গতি সমস্যা ছিল।
বিকল্প সমাধান 1 (স্টাব এবং আনস্টাবের ব্যবহার):
after(:build) { |user|
user.class.any_instance.stub(:run_something1)
user.class.any_instance.stub(:run_something2)
}
trait :with_after_save_callback do
after(:build) { |user|
user.class.any_instance.unstub(:run_something1)
user.class.any_instance.unstub(:run_something2)
}
end
বিকল্প সমাধান 2 (আমার পছন্দসই পদ্ধতি):
after(:build) { |user|
class << user
def run_something1; true; end
def run_something2; true; end
end
}
trait :with_after_save_callback do
after(:build) { |user|
class << user
def run_something1; super; end
def run_something2; super; end
end
}
end
:on => :create
বৈধতা এড়াতে চান তবে ব্যবহার করুনafter(:build) { |user| user.class.skip_callback(:validate, :create, :after, :run_something) }