工厂女孩在安全回调之前

时间:2018-01-18 09:24:40

标签: ruby rspec factory-bot

我有一个非常具体的用例。在保存工厂实例“deleted_user”之前,我每次都需要在“users”表中为其分配ID,以便“恢复”工作。

class DeletedUser < ActiveRecord::Base
  def restore
   User.create!(attributes) # ID here is included and is important to be. We want a user with the same ID that it was before deleting!
  end
end

FactoryGirl.register :deleted_user do
  # need to plug before save and assign ID that never will be used for user ID.
end

并且有不同的方法可以持久保存工厂实例:

  1. FactoryGirl.create :deleted_user
  2. FactoryGirl.create_list(:deleted_user)
  3. FactoryGirl.build(:deleted_user).save
  4. FactoryGirl.build(:deleted_user).save!
  5. FactoryGirl.build_list(:deleted_user, 2).map(&:save)
  6. FactoryGirl.build_list(:deleted_user, 2).map(&:save!)
  7. 正如我所看到的,Factory Girl之前没有保存回调但只有before(:create)on_creation,但它们仅针对上述调用的1, 2触发。

    您是否知道如何优雅地使用自定义before(:save)回调?

    注意:我的FactoryGirl是4.5.0

1 个答案:

答案 0 :(得分:0)

您也可以将您的逻辑包含在after(:build)中,因为在您致电.save之前,它不会触及数据库。