#rspec #ruby-on-rails-5 #factory-bot
Вопрос:
У меня есть черта на фабрике, что-то вроде этого
trait :trial_with_address_info do
first_name {'User'}
last_name {'Name'}
email {'trial.user@gmail.com'}
role {'user'}
tableau_username {'TrialUser'}
association :organisation, factory: [:trial_organisation]
association :user_group, factory: [:generic_user_group]
address {'address'}
city {'city'}
state {'State'}
zip {'123'}
country {'code'}
end
Я хочу создать еще одну черту со всеми теми же свойствами и значениями, как у вышеупомянутой черты, только с одним дополнительным атрибутом.
Каков рекомендуемый способ сделать это? или я должен просто повторить тот же атрибут тот, который мне нужен в новой черте?
Спасибо.
Ответ №1:
Используйте признак в черте признака
trait :trial_with_address_info do
first_name {'User'}
last_name {'Name'}
email {'trial.user@gmail.com'}
role {'user'}
tableau_username {'TrialUser'}
association :organisation, factory: [:trial_organisation]
association :user_group, factory: [:generic_user_group]
address {'address'}
city {'city'}
state {'State'}
zip {'123'}
country {'code'}
end
trait :john_with_address_info
trial_with_address_info
first_name {'John'}
end
Но это также зависит от того, что вы хотите, если вам нужно создать объекты с одной и той же характеристикой, но разными электронными письмами (из-за проверок), рекомендуемым способом было бы использовать последовательности
trait :trial_with_address_info do
# ...
sequence(:email) { |n| "trial.user.#{n}@gmail.com"}
# ...
end
Таким образом, рекомендуемый способ действительно будет зависеть от того, «почему» вы считаете, что вам нужна другая черта.