使用 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) }
我有一个键和值的散列,我想使用 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) }