使用 FactoryGirl 定义多个自定义记录

Define multiple custom records using FactoryGirl

我有一个键和值的散列,我想使用 FactoryGirl 创建它。我经历了具有类似要求的 POST,但无法理解实现我想要的目标的方法。以下是我的尝试:

statuses = {
  "holding_status" => "Holding",
  "scheduled_status" => "Scheduled",
  "submitted_status" => "Submitted",
  "cancelled_status" => "Cancelled",
  "failed_status" => "Failed",
  "none_status" => nil
}

statuses.each do |code, name|
  FactoryGirl.define do
    factory :submit_statuses do
      code code
      name name
    end
  end
end

但是,它给了我以下错误(预期):

/var/lib/gems/2.2.0/gems/factory_girl-4.5.0/lib/factory_girl/decorator.rb:10:in `method_missing': Factory already registered: submit_statuses (FactoryGirl::DuplicateDefinitionError)

编辑(再次尝试)

FactoryGirl.define do
  statuses.each do |code, name|
    factory "submit_#{code}" do
      code code
      name name
    end
  end
end

create(:submit_holding_status)
create(:submit_scheduled_status)
create(:submit_submitted_status)
create(:submit_cancelled_status)
create(:submit_failed_status)
create(:submit_none_status)

你希望如何调用这个工厂?我有点不清楚你希望在这里实现什么。

我推荐的一种可能方法是将每个状态类型定义为 factory trait:

statuses = {
  "holding_status" => "Holding",
  "scheduled_status" => "Scheduled",
  "submitted_status" => "Submitted",
  "cancelled_status" => "Cancelled",
  "failed_status" => "Failed",
  "none_status" => nil
}

FactoryGirl.define do
  factory :submit_status do
    statuses.each do |code, name|
      trait code.to_sym do
        code code
        name name
      end
    end
  end
end

# Usage:
FactoryGirl.create(:submit_status, :holding_status)

# Or:
statuses.map { |status| FactoryGirl.create(:submit_status, status) }