اختبارات مجفف مع الجمعيات في Factory_Girl
-
16-09-2019 - |
سؤال
هل يمكن لأي شخص أن يقترح طريقة أفضل لجعل المصنع يستخدم مثالا نموذجيا مسبقا لجمعيته؟ على سبيل المثال، حتى يكون ذلك ممكنا أدناه لتحديد طفل من مصنع الرسالة بحيث دعوة إلىFactory(:my_message)
يمكن أن يكون بديلا عن.Factory(:message,:sender=>@me)
?
في بعض الأحيان يكون التجزئة الإعداد أكثر مشاركة أكثر مما كانت عليه في هذا المثال المفتعل، أو يتكرر فقط في العديد من الاختبارات التي يبدو أنها أفضل لدفعه إلى المصنع.
بديل واحد يمكنني التفكير فيه هو تحديد طريقة مساعد اختبار مثل create_message_owned_by(@me)
, ، لكنني آمل أن تكون هناك طريقة داخل factory_girl نفسها.
مصانع Factory_Girl:
Factory.define :sender do |s|
sender.name "Dummy name"
end
Factory.define :message do |msg|
msg.text "Dummy text"
msg.association :sender
end
Factory.define :my_message, :parent=>:message do |msg|
msg.text "Dummy text"
### ? what goes here for msg.association :sender ? ###
end
ExcherationControllertest مقتطف (باستخدام يجب):
context "on GET /messages" do
setup do
@me = Factory(:sender)
@my_message = Factory(:message,:sender=>@me)
@somebody_elses_message = Factory(:message)
sign_in_as(@me)
get :index
end
should "only assign my messages" do
assert_contains(assigns(:messages), @my_message)
assert_does_not_contain(assigns(:messages), @somebody_elses_message)
end
end
المحلول
لا أعرف إذا كان هذا هو ما تبحث عنه، ولكن إذا قمت أولا بإنشاء رسالة، فيمكنك جلب المرسل عبر ذلك وتعيينه @me
.
@my_message = Factory(:message)
@me = @my_message.sender
هل هذا يساعد على الإطلاق؟
نصائح أخرى
تجاهل لمدة دقيقة المشكلة المتمثلة في إنشاء تبعية غير واضحة، يمكن معالجة المثال أعلاه مع وجود ردود جديدة في FactoryGirl 1.2.3. هناك الان after_build
و after_create
الاحتياطات، بحيث يمكنك إجراء عمليات على الكائنات التي تم إنشاؤها بعد وجودها بالفعل في قاعدة البيانات (ولها معرف للاستيلاء عليها، إلخ).
أنظر أيضا هذا السؤال و هذا الموضوع من قائمة Factory_Girl البريدية.