Работая над возможным ответом, я столкнулся с тем фактом, что trait
выполняется только после того, как ему дан блок.Я поделюсь примером кода, на котором я был в данный момент, хотя, если вы протестируете его, у вас будут только активные или неактивные пользователи, но не оба.
Вы можете экспортировать логикуиз ваших черт в двух лямбдах и затем выберите один случайным образом:
trait_active = lambda do |context|
context.active { true }
#...
end
trait_inactive = lambda do |context|
context.active { false }
# ...
end
FactoryBot.define do
factory :user do
trait :active do
trait_active.call(self)
end
trait :inactive do
trait_inactive.call(self)
end
trait :schrodinger do
[trait_active, trait_inactive].sample.call(self)
end
end
end
Атрибут context
в лямбде очень важен здесь, вы можете узнать больше об этом в этом ответе .