【问题标题】:Trait with jus one attribute different只有一个属性不同的特征
【发布时间】:2021-10-06 13:20:43
【问题描述】:

我在工厂里有这样的特质

    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

我想创建另一个具有所有相同属性和值的特征,就像上面的特征一样,只有一个附加属性。

推荐的方法是什么?还是我应该重复相同的属性 + 我在新特征中需要的那个?

谢谢。

【问题讨论】:

    标签: rspec ruby-on-rails-5 factory-bot


    【解决方案1】:

    使用特征within a trait feature

        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
    

    但这也取决于您想要什么,如果您需要创建具有相同特征但不同电子邮件的对象(因为验证),推荐的方法是使用sequences

        trait :trial_with_address_info do
          # ...
          sequence(:email) { |n| "trial.user.#{n}@gmail.com"}
          # ...
        end
    

    所以推荐的方式实际上取决于你认为你需要另一个特质的“原因”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-11
      • 2017-06-15
      • 2019-05-30
      • 1970-01-01
      • 2017-08-18
      • 2018-08-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多