FactoryGirl - 如何在运行测试之前在数据库中生成类别条目的层次结构?

时间:2012-01-11 21:46:35

标签: ruby-on-rails testing cucumber factory-bot

我正在建立一个电子商务网站,其核心是目录模块 - 它包含大约20个类别,每个类别在5& 5之间。 30个子类别,产品然后与子类别相关联。

我想弄清楚如何创建父类别&然后至少使用FactoryGirl与同一父级关联的2个子类别。

这是我到目前为止所做的:

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数据都显示在正确的页面上。

有谁知道如何做到这一点?我知道这可能是一个非常新手的问题,感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

您可以将哈希传递给任何工厂调用以覆盖任何属性 - 也适用于build_list调用:

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

请参阅docs

中“构建和创建多个记录”部分中的示例

答案 1 :(得分: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
相关问题