有什么方法可以使用 Factory Bot 从同一资源创建不同的工厂吗?

Is there any way of creating different factories from the same resource with Factory Bot?

我有一个这样的用户工厂:

FactoryBot.define do
  factory :user do
    email { 'doo@d.com' }
    password { 'password' }
    password_confirmation { 'password' }
    admin { true }
    confirmed_at Time.now
  end
end

我在我的功能规范中使用的是这样的:

user = create(:user)

但我希望能够为不同的测试用例设置不同的参数。例如,我想要一个 admin { false } 的用户工厂。有什么办法吗?

你试过这样的事情吗?

FactoryBot.define do
  factory :user do
    email { 'doo@d.com' }
    password { 'password' }
    password_confirmation { 'password' }
    admin { false }
    confirmed_at Time.now

    factory :admin do 
      admin { true }
    end
  end
end

admin = create(:admin)

只需使用特征:

FactoryBot.define do
  factory :user do
    email { 'doo@d.com' }
    password { 'password' }
    password_confirmation { 'password' }
    admin { false }
    confirmed_at { Time.now }

    trait :admin do
      admin { true }
    end
  end
end

所以 FactoryBot.create(:user) 是普通用户,FactoryBot.create(:user, :admin) 是管理员

如您在 README 中所见,您可以同时使用不同的特征