2012-01-11 2 views
1

Я создаю сайт электронной торговли, ядром которого является модуль каталога - он содержит около 20 категорий, каждый из которых имеет между 5 30 подкатегорий, продукты затем связаны с подкатегориями.FactoryGirl - Как создать иерархию записей категории в базе данных перед запуском тестов?

Я пытаюсь выяснить, как создать родительскую категорию &, тогда как минимум 2 подкатегории, связанные с одним и тем же родителем с использованием FactoryGirl.

Вот то, что я до сих пор:

Factory.define :parent_category do |f| 
    f.name "MetalWork" 
end 

Factory.define :child_category do |f| 
    f.name "Wedling" 
    f.association :parent_category 
    f.metatitle "" 
    f.metadescription "" 
end 

Я имею в виду, используя последовательность для создания имени ребенка категории & SEO данные, однако, если я генерировать 2 child_category модели с помощью:

FactoryGirl.build_list(:child_category, 2) 

он создаст две отдельные родительские категории, что не то, что я хочу.

Его важно, чтобы были по крайней мере две дочерние категории, потому что нам нужно обеспечить, чтобы различные данные SEO, сохраняемые с помощью моделей дочерних категорий, отображались как на правильных страницах.

Кто-нибудь знает, как это сделать? Я знаю, это, наверное, очень новичок вопрос, спасибо за любую помощь!

ответ

0

Я хотел бы начать с чем-то вроде

# spec/support/factories.rb 
FactoryGirl.define do 
    factory :parent_category do 
    name 'MetalWork' 
    end 

    factory :child_category do 
    name 'Wedling' 
    metatitle '' 
    metadescription '' 
    end 
end 

# some_controller_spec.rb 
before :each do 
    @parent = Factory :parent_directory 
    (5 + rand(26)).times do 
    # replace :parent_id with whatever attribute 
    # you have to store parent category 
    @child = Factory :child_directory, :parent_id => @parent.id 
    # next you can fabricate your products with :category => @child 
    # ... 
    end 
end 
1

Вы можете передать хэш любой фабричной вызов переопределить любой из атрибутов - это идет для build_list вызова тоже:

parent = Factory(:category, :name => "Test Category") 
FactoryGirl.build_list(:child_category, 2, :parent_category => parent) 

См примеры в разделе «Создание и создание нескольких записей» в docs.

Смежные вопросы