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 回答