构建具有特征的对象列表

时间:2014-01-17 14:08:53

标签: ruby factory-bot

我正在使用factory_girl在我的测试中创建对象,这是我工厂的一个例子:

factory :user do
  name "John"
  surname "Doe"

  trait :with_photo do
    ignore do
      photo_count 1
    end

    after(:create) do |user, evaluator|
      FactoryGirl.create_list(:photo, evaluator.photo_count)
    end
  end
end

所以我可以创建一个像这样的照片的用户:

FactoryGirl.create(:user, :with_photo)

或没有照片:

FactoryGirl.create(:user) 

或创建用户列表:

FactoryGirl.build_list(:user, 5)

但是,如果我想用照片创建其中五个用户,我怎么能建立一个具有特征的用户列表(特征为:with_photo)?

2 个答案:

答案 0 :(得分:43)

这不行吗?它应该......

FactoryGirl.build_list(:user, 5, :with_photo)

答案 1 :(得分:2)

您还可以将多个特征传递给create_listbuild_list示例;

factory :user do
  name { "Friendly User" }

  trait :male do
    name { "John Doe" }
    gender { "Male" }
  end

  trait :admin do
    admin { true }
  end
end

# creates 3 admin users with gender "Male" and name "Jon Snow" using the admin and male trait
build_list(:user, 3, :admin, :male, name: "Jon Snow")
create_list(:user, 3, :admin, :male, name: "Jon Snow")

只需确保特征出现在要创建的记录数之后,最后一个参数是将覆盖record属性的哈希。

More on traits on the official docs