0

FactoryGirl を使用して、カテゴリの単純なツリーをテストするために使用する自己関連付けられたオブジェクトを作成しようとしています。関連付けを設定するための FactoryGirl の Getting Started ドキュメントを読みましたが、まだ問題があります。オブジェクトに親と子があることをテストしたいと思います (FactoryGirl 定義で設定されているため、子は 1 つです)。親のテストは成功するが、子のテストでは失敗する

エラーメッセージ

1) Category should have a child
   Failure/Error: category.children.count.should eq(1)

     expected: 1
          got: 0

RSPEC テスト

it "should have a child" do
    category = FactoryGirl.build(:parent_category)

    category.should_not be_nil

    category.children.count.should eq(1)
end

it "should have a parent" do
    category = FactoryGirl.build(:child_category)

    category.should_not be_nil

    category.parent.should_not be_nil
end

親/子関係の MODEL セットアップ (同じモデルの):

class Category < ActiveRecord::Base
  include ActiveModel::ForbiddenAttributesProtection

  belongs_to :parent, :class_name => 'Category'
  has_many :children, :class_name => 'Category', :foreign_key => 'parent_id', :dependent => :destroy

  attr_accessible :name, :parent_id

  validates :name, :presence => true

  before_validation :uppercase_name

  def uppercase_name
    self.name.upcase! unless self.name.nil?
  end
end

ファクトリーガールのセットアップ:

FactoryGirl.define do
  factory :category do
    name "CATEGORY"

    factory :parent_category do
      name "PARENT"
      parent_id 0
      after(:create) do |pc, evaluator|
        FactoryGirl.create_list(:category, 1, parent: pc)
      end
    end

    factory :child_category do
      name "CHILD"
      association :parent, factory: :parent_category
    end

  end
end
4

2 に答える 2

1

awesome_nested_setの同時実行性の問題により、最終的にclosure_treeを使用することになりました

于 2013-05-01T16:27:31.867 に答える
0

awesome_nested_setという有望な gem を見つけました。これは非常に DRY な目的を果たしているようです。

そして、 ancestryと呼ばれるもう 1 つの興味深い木の宝石です。

于 2013-03-19T00:29:18.640 に答える