FactoryGirls 多重关联
FactoryGirls multiple associations
我正在思考这个问题。我是 FactoryGirl 的新手,所以这可能在某处解释得很清楚,如果是这样的话,我深表歉意。这当然不是一个独特的问题,可能是我的 Google 技术不够好。
我正在处理订单,属于类别,属于客户。我正在尝试构建一个下了 5 个订单的客户,但是当它尝试构建类别(需要唯一名称)时,我不断抛出唯一错误。
features/customer_spec.rb
RSpec.feature "Customer management", :type => :feature do
scenario "Customer with orders has order history" do
customer = create(:customer, :with_5_completed_orders)
visit customer_path(customer)
expect(page).to have_content("Recent Orders")
end
end
factories/customers.rb
FactoryGirl.define do
factory :customer do
...
trait :with_5_completed_orders do
after :create do |customer|
create_list(:order_line, 5, :completed, :customer => customer)
end
end
end
end
factories/order_line.rb
FactoryGirl.define do
factory :order_line do
....
product
....
end
end
factories/product.rb
FactoryGirl.define do
factory :product do |f|
....
category
....
end
end
factories/categories.rb
FactoryGirl.define do
sequence :category_name do |n|
"category-#{n}"
end
factory :category do
name { generate(:category_name) }
end
end
如果我没猜错,你的类别名称唯一性有问题。
您可以使用sequences与FactoryGirl生成唯一的类别名称:
sequence :category_name do |n|
"category-#{n}"
end
factory :category do
name { generate(:category_name) }
end
FactoryGirl 关于 sequences 的文档也值得一读。
如果您打算重复使用同一类别两次,您可以先创建一个并在所有订单中重复使用:
trait :with_5_completed_orders do
after :create do |customer|
cat = generate(:category)
create_list(:order_line, 5, :completed, customer: customer, category: cat)
end
end
我正在思考这个问题。我是 FactoryGirl 的新手,所以这可能在某处解释得很清楚,如果是这样的话,我深表歉意。这当然不是一个独特的问题,可能是我的 Google 技术不够好。
我正在处理订单,属于类别,属于客户。我正在尝试构建一个下了 5 个订单的客户,但是当它尝试构建类别(需要唯一名称)时,我不断抛出唯一错误。
features/customer_spec.rb
RSpec.feature "Customer management", :type => :feature do
scenario "Customer with orders has order history" do
customer = create(:customer, :with_5_completed_orders)
visit customer_path(customer)
expect(page).to have_content("Recent Orders")
end
end
factories/customers.rb
FactoryGirl.define do
factory :customer do
...
trait :with_5_completed_orders do
after :create do |customer|
create_list(:order_line, 5, :completed, :customer => customer)
end
end
end
end
factories/order_line.rb
FactoryGirl.define do
factory :order_line do
....
product
....
end
end
factories/product.rb
FactoryGirl.define do
factory :product do |f|
....
category
....
end
end
factories/categories.rb
FactoryGirl.define do
sequence :category_name do |n|
"category-#{n}"
end
factory :category do
name { generate(:category_name) }
end
end
如果我没猜错,你的类别名称唯一性有问题。
您可以使用sequences与FactoryGirl生成唯一的类别名称:
sequence :category_name do |n|
"category-#{n}"
end
factory :category do
name { generate(:category_name) }
end
FactoryGirl 关于 sequences 的文档也值得一读。
如果您打算重复使用同一类别两次,您可以先创建一个并在所有订单中重复使用:
trait :with_5_completed_orders do
after :create do |customer|
cat = generate(:category)
create_list(:order_line, 5, :completed, customer: customer, category: cat)
end
end