构建具有特征的对象列表

Gan*_*row 15 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
Run Code Online (Sandbox Code Playgroud)

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

FactoryGirl.create(:user, :with_photo)
Run Code Online (Sandbox Code Playgroud)

或者没有照片:

FactoryGirl.create(:user) 
Run Code Online (Sandbox Code Playgroud)

或者创建用户列表:

FactoryGirl.build_list(:user, 5)
Run Code Online (Sandbox Code Playgroud)

但是:with_photo,如果我想用照片创建其中五个用户,我如何建立一个具有特征(特质存在)的用户列表?

Thi*_*ilo 45

这不行吗?这应该...

FactoryGirl.build_list(:user, 5, :with_photo)
Run Code Online (Sandbox Code Playgroud)

  • 在计数之后首先添加特征似乎很重要,然后再指定其他属性。`FactoryGirl.build_list(:user, 5, :with_photo, tag: 'value')` 如果在 `tag:` 之后添加 `:with_photo` 则不起作用 (2认同)

the*_*guy 8

您还可以将多个特征传递给create_list示例build_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")
Run Code Online (Sandbox Code Playgroud)

只需确保特征位于您希望创建的记录数之后,最后一个参数是一个将覆盖记录属性的哈希值。

更多关于特质的内容请参见官方文档