Указание ассоциаций в Factory

Я хочу указать следующий тип ассоциаций через FactoryGirl. У меня есть три модели A, B и C, где модель C, которая находится в DataMapper, выглядит следующим образом:

Class C do
   include DataMapper::Resource
   belongs_to :A, :key=>true
   belongs_to :B, :key=>true
end

Я не знаю, как указать это в FactoryGirl, т.е. я имею в виду, что хочу написать так:

factory :c do |c|
<To be Filled>
end

Пожалуйста помоги.


person Joy    schedule 22.08.2013    source источник


Ответы (3)


Не уверен насчет DataMapper (и как это вписывается / включено ли оно в определение фабрики), но для ассоциаций сделайте следующее:

FactoryGirl.define do

  factory :C do |c|
    ...
    c.association :a
    c.association :b
  end  

end
person dax    schedule 22.08.2013

Лицензия принадлежит LicenseTemplate

FactoryGirl.define do
  factory :license do
    start_date { Time.now}
    end_date   { Time.now + 30.days }

    factory :license_with_template do
      association :license_template, factory: :license_template
    end

    after(:build) do |doc|
      if doc.license_template
        doc.agents_count = doc.license_template.agents
        doc.requests = doc.license_template.requests
      end
    end
  end
end

приведенный выше код дает мне две фабрики: «лицензия» и «license_with_template». блок after 'build' инициализирует значения, которые необходимо инициализировать перед сохранением объекта.

person prasad.surase    schedule 22.08.2013

FactoryGirl.define do
  factory :c do |f|
    f.a
    f.b
  end
end

если вы создаете фабрики как для a, так и для b и убедитесь, что имена фабрик такие же, как у модели, это все, что вам нужно для указания ассоциации. FactoryGirl будет создавать как a, так и b каждый раз, когда вы делаете: FactoryGirl.create(:c) . Ассоциация должна быть указана только на одной стороне, желательно, чтобы она принадлежала стороне.

person Optimus Pette    schedule 22.08.2013