我有以下
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>'
任何帮助表示感谢。
答案 0 :(得分:10)
您收到此错误是因为您试图向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