في المواصفات / المصانع / post_factory.rb:
FactoryGirl.define do
factory :post do
user
title Faker::Lorem.sentence
body Faker::Lorem.paragraphs
end
end
مع ذلك ، أحصل على هذا الخطأ:
... factory_girl-2.6.1/lib/factory_girl/registry.rb:39:in `add_as': Factory already registered: post (FactoryGirl::DuplicateDefinitionError)
إذا قمت بتغيير factory :post
إلى factory :a_post, class: Post
أو أي اسم آخر ، فسيكون ذلك جيدًا. المصانع الأخرى الوحيدة التي حددتها هي المستخدم والجلسة (وتلك تعمل بشكل جيد).
هل أفعل شيئًا خاطئًا ، أم أن هناك مصنعًا للبريد الداخلي يتم تحديده تلقائيًا مما يمنعني من استخدام هذا الاسم؟
هناك مشكلتان محتملتان ، بافتراض أنك _ 100٪ إيجابي _ لا يوجد مصنع آخر للبريد (هذا هو أول شيء سأفحصه). هل تستخدم factory_girl_rails
gem و Rails 3؟ إذا كنت كذلك ، فتأكد من أنك لا تحتاج إلى factory_girl_rails
في أي مكان في spec_helper أو أي ملف آخر سيتم تحميله أثناء الاختبارات. تأكد أيضًا من أنك لا تتصل بـ FactoryGirl.find_definitions
، والذي سيؤدي إلى تحميل جميع المصانع ؛ تشغيل هذا مرتين طريقة مؤكدة لإطلاق النار لرؤية هذا الخطأ. أخيرًا ، هل تتصل بـ require "spec/factories/post_factory"
أي مكان؟ سيحمل factory_girl_rails
جميع المصانع لذا هذا غير ضروري.
لا تنشئ FactoryGirl أي مصانع لك افتراضيًا ، لذا لن تتداخل مع مصنعك.
ويلب. على ما يبدو ، عندما أنشأت نموذج النشر ، تم إنشاء test / plants / posts.rb ، لكنني كنت أبحث فقط في دليل المواصفات منذ أن استخدمت RSpec.
أزلت ذلك وكل شيء يعمل. شكرا.
آه ، رائع! اعتقدت أن هذا هو الجاني على الأرجح.
التعليق الأكثر فائدة
هناك مشكلتان محتملتان ، بافتراض أنك _ 100٪ إيجابي _ لا يوجد مصنع آخر للبريد (هذا هو أول شيء سأفحصه). هل تستخدم
factory_girl_rails
gem و Rails 3؟ إذا كنت كذلك ، فتأكد من أنك لا تحتاج إلىfactory_girl_rails
في أي مكان في spec_helper أو أي ملف آخر سيتم تحميله أثناء الاختبارات. تأكد أيضًا من أنك لا تتصل بـFactoryGirl.find_definitions
، والذي سيؤدي إلى تحميل جميع المصانع ؛ تشغيل هذا مرتين طريقة مؤكدة لإطلاق النار لرؤية هذا الخطأ. أخيرًا ، هل تتصل بـrequire "spec/factories/post_factory"
أي مكان؟ سيحملfactory_girl_rails
جميع المصانع لذا هذا غير ضروري.لا تنشئ FactoryGirl أي مصانع لك افتراضيًا ، لذا لن تتداخل مع مصنعك.