如何在多个文件中拆分factory_girl定义?

luc*_*zbo 12 ruby-on-rails factory-bot

我的factories.rb文件变得太大而无法维护,我现在正试图将其拆分到factories目录中的许多文件中.问题是我不知道如何处理依赖项.

总而言之,我试图以下列方式分割我的工厂.所有序列都转到sequences.rb文件,每个工厂定义都转到单独的文件,如下所示:

工厂/ sequences.rb

FactoryGirl.define do
   sequence :name {|n| "Name #{n}" }
   sequence :email {|n| "person#{n}@example.com" }
end
Run Code Online (Sandbox Code Playgroud)

工厂/ user.rb

FactoryGirl.define do
    factory :user do
        name
        email
    end
end
Run Code Online (Sandbox Code Playgroud)

工厂/ post.rb

FactoryGirl.define do
    factory :post do
        name
        content "Post Content"
        user
    end
end
Run Code Online (Sandbox Code Playgroud)

当我运行测试时,我得到的name是没有定义的错误.我可以通过传递一个块的每个关联(如处理这个name,email,user等)提及,但它似乎是丑陋和不干燥.

  1. 有没有办法factory_girl知道应该加载哪些文件的序列?
  2. 当无法通过更改文件的加载顺序来解决此问题时,处理复杂的依赖关系?

its*_*lay 7

您可以使用generate方法简单地实现结果:

# factories/sequences.rb
FactoryGirl.define do
  sequence(:email) { |n| "person#{n}@example.com" }
end

# factories/user.rb
FactoryGirl.define do
  factory :user do
    email { generate(:email) }
    password '12345678'
  end
end
Run Code Online (Sandbox Code Playgroud)

然后尝试一下:

FactoryGirl.create :user
=> #<User:0x007fa99d2ace40
 id: 1,
 email: "person1@example.com",
 . . .>
Run Code Online (Sandbox Code Playgroud)

序列文档了解更多详细信息.