Sometimes you want to DRY up traits by referencing one trait from another trait in factory_bot
. I tried searching on “inheriting traits” (that’s just for one factory inheriting traits from another and was in a factory_bot
issue in GitHub). I accidentally stumbled upon the answer in a slightly unrelated StackOverflow question about calling a trait from another trait with params in factory_girl
.
Ultimately, you use the trait name from the first trait as a method invocation in the referencing trait:
FactoryBot.define do
factory :user do
role
trait :with_supervisor do
# complex set up might go
# here
after(:create) do |user|
supervisor { create(:user) }
end
end
trait :with_organization do
with_supervisor # invoke the other trait first
organization
end
end
end