在工厂之前(:创建)基于工厂女孩宝石的某些条件

时间:2014-04-28 14:17:52

标签: ruby rspec factory-bot shoulda

我使用factory_girl gem版本:4.4.0和ruby-1.9.3-p429。我正在其中一个工厂中使用before(:create),如下所示:

factory :entity1 do
      b_date  Time.now
      a_date  Time.now
      event   "test_event"

      before(:create) { FactoryGirl.create(:entity2)  }
end

factory :entity2 do
      from_date  Date.today - 1.day
      till_date  Date.today + 1.day
end

现在from_datetill_date entity2上有一个独特的条件,换句话说我只想创建entity2一次。我可以在if的工厂中引入一些entity1条件,这样before(:create)子句只在我第一次创建entity1时执行,并且从下次开始它就不会执行entity2条件。创建{{1}}。

1 个答案:

答案 0 :(得分:0)

解决您的唯一性问题的最快方法是在创建现有模型之前查找现有模型:

before(:create) do
  Entity2Model.find_by_unique_field('value') ||
    FactoryGirl.create(:entity2)
end

但是,我也以此为契机,向自己问一些关于这种依赖性的问题:

  • 如果只有entity2的一个实例,它是否需要在数据库中?
  • 如果只有entity2的一个实例,它作为单身方法比关联更有意义吗?
  • entity1每次使用时是否真的需要entity2?如果是这样,他们可以脱钩吗?

<强>更新

如果它只是一个唯一性约束而且您可以有多个,则可以使用序列生成entity2的唯一值:

factory :entity2 do
  sequence(:from_date) { |n| n.days.ago }
  till_date { from_date + 1.day }
end