FactoryGirl - 如何动态生成或覆盖回调

时间:2014-09-23 11:45:06

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

我有一个具有存档功能的应用程序,允许用户在删除对象后恢复它们。

  • Organisation has_many Contact,且必须至少有一个。
  • Contact必须belong_to一个Organisation
  • 两个对象都可以归档,但Organisation只有archived归档所有关联的Contact时才会归档。

目前我有以下内容。这种方法的问题是,FactoryGirl.create(:archived_organisation)似乎会触发after(:create)工厂中的:organisation个回调:

factory :contact do
  name { Faker::Name.first_name }
  association :organisation, :factory => :organisation, :contacts_count => 0

  factory :archived_contact do
    archived true
    association :organisation, :factory => :archived_organisation, :contacts_count => 0
  end
end

factory :organisation do
  name { Faker::Company.name }

  ignore do
    contacts_count 2
  end

  after(:create) do |instance, evaluator|
    FactoryGirl.create_list(:contact, evaluator.contacts_count, organisation: instance)
  end

  factory :archived_organisation do
    archived true

    after(:create) do |instance, evaluator|
      FactoryGirl.create_list(:archived_contact, evaluator.contacts_count, organisation: instance)
    end
  end
end

应该如何实现?是否可以覆盖:organisation工厂中的after(:create) :archived_organisation回调?如果没有,是否可以根据正在创建的工厂动态生成回调?

希望我错过了一些明显的东西,但我欢迎提出一些建议,我应该采取不同的方式。

1 个答案:

答案 0 :(得分:1)

怎么样:

after(:create) do |instance, evaluator|
  unless instanse.archived
    FactoryGirl.create_list(:contact, evaluator.contacts_count, organisation: instance)
  end
end