我正在努力思考这个问题。我对FactoryGirl很新,所以这可以在某处清楚解释,如果是这样我会道歉。这当然不是一个独特的问题,也许我的谷歌技能不太符合标准。
我正在处理订单,属于类别并属于客户。我正在尝试构建一个订购了5个订单的客户,但是当我尝试构建类别(需要一个唯一的名称)时,我会继续抛出唯一的错误。
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
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
FactoryGirl.define do
factory :order_line do
....
product
....
end
end
FactoryGirl.define do
factory :product do |f|
....
category
....
end
end
FactoryGirl.define do
sequence :category_name do |n|
"category-#{n}"
end
factory :category do
name { generate(:category_name) }
end
end
答案 0 :(得分:0)
如果我做对了,你就会遇到类别名称唯一性的问题。
您可以使用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