【问题标题】:FactoryBot to build list of objects with traitFactoryBot 构建具有特征的对象列表
【发布时间】:2014-01-17 14:08:53
【问题描述】:

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

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

  trait :with_photo do
    ignore do
      photo_count 1
    end

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

所以我可以创建一个带有照片的用户:

FactoryBot.create(:user, :with_photo)

或者没有照片:

FactoryBot.create(:user) 

或者创建一个用户列表:

FactoryBot.build_list(:user, 5)

但是,如果我想创建五个带有照片的用户,我该如何构建具有特征(特征为 :with_photo)的用户列表?

注意:FactoryBot 以前称为 FactoryGirl

【问题讨论】:

    标签: ruby factory-bot


    【解决方案1】:

    这不起作用吗?应该...

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

    参考

    FactoryBot - Building or Creating Multiple Records

    注意:FactoryBot 以前称为 FactoryGirl

    【讨论】:

    • 它也不适合我。直到我意识到我使用的是复数形式。 users
    • 在计数之后首先添加特征似乎很重要,然后是其他属性的规范。 FactoryGirl.build_list(:user, 5, :with_photo, tag: 'value') 不行,如果你在tag: 后面加上:with_photo 就不行了
    【解决方案2】:

    您还可以将多个特征传递给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")
    

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

    More on traits on the official docs

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-31
      • 2013-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-11
      • 1970-01-01
      相关资源
      最近更新 更多