Какъв е синтаксисът за създаване на фабрика с асоциация, която използва характеристика?

Наистина се опитвам да си обясня как да създавам сложни фабрики с Factory Girl и това НЕ е лесно.

Имам следното:

  • Абонаментът принадлежи на потребителя

  • Абонаментът принадлежи към плана

Искам да тествам различни Plans. Ето как го настроих:

FactoryGirl.define do
  factory :plan do
    trait :copper do
      name          { "Copper" }
      amount        { 5 }
      stripe_id     { "Economy" }
      listing_limit { 10 }
      repositories_allowed { 1 }
    end
    trait :copper_multi do
      name          { "Copper Multi" }
      amount        { 10 }
      stripe_id     { "Copper_Multi" }
      listing_limit { 10 }
      repositories_allowed { 5 }
    end
    trait :bronze do
      name          { "Bronze" }
      amount        { 5 }
      stripe_id     { "Basic" }
      listing_limit { 10 }
      repositories_allowed { 1 }
    end
    trait :bronze_multi do
      name          { "Bronze Multi" }
      amount        { 10 }
      stripe_id     { "Basic_Multi" }
      listing_limit { 10 }
      repositories_allowed { 5 }
    end
  end
end

Subscription фабриката е:

FactoryGirl.define do
  factory :subscription do
    association :user
    association :plan
    start_date { Time.now }
    end_date { 365.days.from_now }
  end

end

Естествено, това се проваля, тъй като фабриката Plan не може да се използва, без също да се посочи черта. Това е по проект.

Освен това каква е разликата между:

  factory :subscription do
    association :user
  end

и:

  factory :subscription do
    user
  end

person AKWF    schedule 09.01.2014    source източник


Отговори (1)


Посочете план по подразбиране

FactoryGirl.define do
  factory :plan do
    name          { "Default" }
    amount        { 1 }
    stripe_id     { "Default" }
    listing_limit { 10 }
    repositories_allowed { 1 }

    trait :copper do
      name          { "Copper" }
      amount        { 5 }
      stripe_id     { "Economy" }
      listing_limit { 10 }
      repositories_allowed { 1 }
    end
  end
end

Сега това трябва да работи

FactoryGirl.define do
  factory :subscription do
    association :user
    association :plan
    start_date { Time.now }
    end_date { 365.days.from_now }
  end
end

Ако искате да създадете абонамент със специфична характеристика (мед) за план

FactoryGirl.define do
  factory :subscription do
    association :user
    association :plan, :factory => [:plan, :copper]
    start_date { Time.now }
    end_date { 365.days.from_now }
  end
end

Няма разлика между

factory :subscription do
    association :user
  end

и

factory :subscription do
  user
end

Но можете да използвате по-късно само ако името на асоциацията и фабричното име съвпадат

person usha    schedule 09.01.2014