FactoryGirl具有对同一类的多个引用

时间:2013-12-06 18:53:18

标签: ruby-on-rails rspec factory-bot

我有以下型号:

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

我做错了什么?

1 个答案:

答案 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获得战利品。