4

必要な関連オブジェクトが多数あるオブジェクトを操作する際に、ruby gem 'FactoryGirl' を効果的に使用する方法についてアドバイスを求めています。

たとえば、クラス間に次の関係があるとします。

class A < ActiveRecord
  has_many B
end

class B < ActiveRecord
  belongs_to A
  has_many C
end

class C < ActiveRecord
  belongs_to B
end

ここで、C コントローラーのテスト ケースを作成する場合は、このチェーン内のすべてのオブジェクトを作成する必要があります。現在、それが私が自分の工場で行っていることです。しかし、より良い方法はありますか?

4

1 に答える 1

7

工場が次のように設定されている場合:

FactoryGirl.define do
  factory :library do
    name "Chicago Public Library"
    street_address "123 Morgan St."
  end

  factory :book do
    title "A Great Book"
    author "Mandy Yeats"
    association :library
  end

  factory :page do
    page_number 123
    association :book
  end
end

テストで :page のインスタンスを作成すると、FactoryGirl は :book と :library のインスタンスも作成します。最初にライブラリとブックを作成する必要はありません。:book を作成すると、テスト用に :library も作成されます。これらのインスタンスは、次のようにテストで使用できます。

page.book.library.name       # after using FactoryGirl.create(:page)
page.book.author

book.library.street_address  # after using FactoryGirl.create(:book)

これは、私が見つけた最も簡単な方法です。

于 2012-10-22T17:02:53.473 に答える