2012-11-01 11 views
6

के लिए अपरिभाषित विधि मैं निम्नलिखित हैFactoryGirl परिभाषा - संघ

/ऐप्स/मॉडल में

:

class Area < ActiveRecord::Base 
    has_many :locations 
end 
class Location < ActiveRecord::Base 
    belongs_to :area 
end 

/app/test/factories/areas.rb

FactoryGirl.define do 
    factory :area do 
    name 'Greater Chicago Area' 
    short_name 'Chicago' 
    latitude 42 
    longitude -88 
    end 
    factory :losangeles, class: Area do 
    name 'Los_Angeles Area' 
    short_name 'Los Angeles' 
    latitude 50 
    longitude 90 
    end 
end 

में में /app/test/factories/locations.rb

FactoryGirl.define do 
    factory :location do 
    name "Oak Lawn" 
    latitude 34 
    longitude 35 
    association :area 
    end 
    factory :malibu, class: Location do 
    name "Malibu" 
    latitude 60 
    longitude -40 
    association :losangeles 
    end 
end 

जब मैं इसे चलाने की कोशिश करता हूं तो मुझे मिलता है:

NoMethodError: undefined method `losangeles=' for #<Location:0x00000102de1478> 
test/unit/venue_test.rb:10:in `block in <class:VenueTest>' 

किसी भी मदद की सराहना की।

उत्तर

9

आपको यह त्रुटि मिल रही है क्योंकि आप malibu फ़ैक्टरी को losangeles नामक एक एसोसिएशन सेट करने के लिए कहने का प्रयास कर रहे हैं, जो मौजूद नहीं है। कारखाना losangeles है जो Area बनाता है। क्या आप चाहते हैं:

FactoryGirl.define do 
    factory :location do 
    name "Oak Lawn" 
    latitude 34 
    longitude 35 
    association :area 
    end 
    factory :malibu, class: Location do 
    name "Malibu" 
    latitude 60 
    longitude -40 
    association :area, factory: :losangeles 
    end 
end 

देखें प्रलेखन here

ध्यान दें कि आप भी दूसरा कारखाना परिभाषित करने के लिए घोंसला बनाने से इस्तेमाल कर सकते हैं:

FactoryGirl.define do 
    factory :location do 
    name "Oak Lawn" 
    latitude 34 
    longitude 35 
    association :area 

    factory :malibu do 
     name "Malibu" 
     latitude 60 
     longitude -40 
     association :area, factory: :losangeles 
    end 

    end 
end 
संबंधित मुद्दे