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