Черта с одним атрибутом отличается

#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
 

Таким образом, рекомендуемый способ действительно будет зависеть от того, «почему» вы считаете, что вам нужна другая черта.