【发布时间】:2019-03-20 18:59:55
【问题描述】:
我想使用 FactoryBot 像这样随机返回 trait:
FactoryBot.define do
factory :user do
[:active, inactive].sample
trait :active do
active { true }
...
end
trait :inactive do
active { false }
...
end
end
end
这样做:
(1..5).map{ |e| FactoryBot.build(:user) }.map(&:active?)
=> [true, false, false, true, false]
其实是这样的:
FactoryBot.define do
factory :user do
active { [true, false].Sample }
name { "name-#{SecureRandom.uuid}" }
birthday { active == true ? rand(18..99).years.ago - rand(0..365).days.ago : nil }
preferred_contact_method { active == true ? %w(phone email).sample : nil }
activated_at { active == true ? rand(1..200).days.ago : nil }
contact_phone_number { preferred_contact_method == "phone" ? "+33XXXXXXXXX" : nil }
contact_email { preferred_contact_method == "email" ? "toto@tati.com" : nil }
end
end
有可能吗?
【问题讨论】:
-
写:
FactoryBot.build(:user, [:active, :inactive].sample)? -
它可以,但你每次使用工厂时都必须考虑它。
标签: ruby factory-bot