FactoryGirl和acts_as_tree使用after_create

时间:2012-09-12 17:59:43

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

我有一个名为MenuHeader的类,其中包含以下内容:

class MenuHeader < ActiveRecord::Base
  acts_as_tree :parent_id
  belongs_to :menu

我想创建几个级别的menu_headers但不知道如何执行此操作:

FactoryGirl.define do
  factory :menu_header do
    name "my menu header"
    menu
    after(:create) { |menu_header| do_something_else_to(user) }
  end
end

我会创建一个:menu_header2,还是我可以如何扩展上面的内容。如何将:parent_id设置为最近创建的menu_header的值?

THX

1 个答案:

答案 0 :(得分:0)

我会使用build创建不同级别的menu_header工厂和after(:build)他们的孩子。顺便说一下,我更喜欢after :build,因为我可以轻松创建非持久化对象进行测试。

FactoryGirl.define do
  factory :menu_header do
    name "my menu header"
    menu

    factory :menu_header_level1 do
      after(:build) do |m|
        m.children << FactoryGirl.build(:menu_header, :name => 'level0 submenu0', :parent => m)
        m.children << FactoryGirl.build(:menu_header, :name => 'level0 submenu1', :parent => m)
      end
    end

    factory :menu_header_level2 do
      after(:build) do |m|
        m.children << FactoryGirl.build(:menu_header_level1, :name => 'level1 submenu0', :parent => m)

      end
    end   
  end
end