2012-11-01 21 views
6

Mam następującyFactoryGirl - metoda zdefiniowana dla stowarzyszenia

w modelach/APP /:

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

w /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 

w /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 

Kiedy próbuję to uruchomić, otrzymuję:

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

Każda pomoc doceniona.

Odpowiedz

9

Otrzymujesz ten błąd, ponieważ próbujesz powiedzieć swojej fabryce malibu, aby ustawić powiązanie o nazwie losangeles, które nie istnieje. To, co istnieje, to fabryka losangeles, która tworzy Area. Co chcesz to:

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 

Patrz dokumentacja here

Zauważ, że można też użyć do zdefiniowania gniazdowania drugą fabrykę:

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 
Powiązane problemy