我有以下型号:
class ProfileAssignment < ActiveRecord::Base
belongs_to :profile
belongs_to :destination_profile, :class_name => "Profile"
attr_accessible :profile_id, :destination_profile_id
end
我想为这个简单的类创建一个工厂。
这就是我所拥有的:
这是我的个人资料工厂:
FactoryGirl.define do
factory :profile do
name "MyString"
end
factory :destination_profile do
name "Other profile"
end
end
这是我的ProfileAssignment工厂
FactoryGirl.define do
factory :profile_assignment do
profile
association :destination_profile, factory: :destination_profile
end
end
但是我收到以下错误:
Failure/Error: expect(FactoryGirl.create(:profile_assignment).valid?).to be_true
NameError:
uninitialized constant DestinationProfile
我做错了什么?
答案 0 :(得分:1)
如果要为Profile类定义工厂destination_profile
,则必须明确提及该类。
Factory girl尝试根据工厂名称初始化类。因此,如果将工厂命名为destination_profile,它将查找名为DestinationProfile的类。向destination_profile工厂提供类信息
FactoryGirl.define do
factory :profile do
name "MyString"
end
factory :destination_profile, :class => Profile do
name "Other profile"
end
end
如果您的关联名称与工厂名称
匹配,您也不必明确指定工厂FactoryGirl.define do
factory :profile_assignment do
profile
association :destination_profile
end
end
如果你想要同一个班级的多个工厂,可以在rspec traits获得战利品。