【问题标题】:FactoryGirl and acts_as_tree using after_createFactoryGirl 和acts_as_tree 使用after_create
【发布时间】:2012-09-12 17:59:42
【问题描述】:

我有一个名为 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 的值?

谢谢

【问题讨论】:

  • 能否详细解释一下。你的问题不清楚。

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


【解决方案1】:

我会使用 after(:build) 创建不同级别的 menu_header 工厂和 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多