FactoryGirl:构建对象会创建其关联对象

时间:2013-10-16 15:16:25

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

我不知道这是FactoryGirl的错误还是我做错了

我有两个工厂定义

factory :employee do
  name "name1"
  association :department
end

factory :department do
  name "department1"
end

我希望以下内容可以构建员工和部门

FactoryGirl.build(:employee, :name => "employee")

但它构建了员工对象并在数据库中创建了部门。我相信它可以用于一些旧版本的FactoryGirl。

我正在使用factory_girl版本4.2.0。

如何使其构建关联对象而不是创建一个?

3 个答案:

答案 0 :(得分:5)

是的,这是FactoryGirl的默认行为。但是,文档显示您可以为关联指定构建策略,例如:

factory :employee do
  name "name1"
  association :department, strategy: :build
end

请参阅https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md#associations

答案 1 :(得分:5)

您可以使用build_stubbed

FactoryGirl.build_stubbed :employee

然后FactoryGirl将在内存中构建一个雇员对象和一个部门对象。所有这两个都有假ids,如1000+,并且正确关联。

答案 2 :(得分:0)

要小心,因为构建不会保存对象,但如果工厂有关联,它仍会向数据库发出请求。例如,如果您在部门工厂中定义了关联,则它们将保留在db中。另一方面,build_stubbed也将通过build_stubbed创建关联。

详细了解此主题here