我有以下
in/app/models:
class Area < ActiveRecord::Base
has_many :locations
end
class Location < ActiveRecord::Base
belongs_to :area
end
in/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
in/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>'
任何帮助。
您正在遇到此错误,因为您正在尝试向malibu
工厂说出一个称为losangeles
的关联,而该关联是不存在的。存在的是创建Area
的工厂losangeles
。您想要的是:
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
请参阅此处的文档
请注意,您也可以使用嵌套来定义第二工厂:
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