这对我来说是一个混乱:
我为用户提供了一个工厂:
FactoryGirl.define do
factory :user do
email { Faker::Internet.email }
password { Faker::Internet.password }
name { Faker::Name.name }
end
end
然后,我试图在另一个工厂定义中创建一个用户,如下所示:
FactoryGirl.define do
user = FactoryGirl.create(:user)
factory :order do
user { user }
status 1
delivery_preferences { "#{Faker::Address.street_address}, #{Faker::Address.city}." }
instant_delivery false
status_changes ["#{rand(5)}, #{Time.now}"]
order_products_ids { user.cart.order_products_ids[0..rand(3)] }
end
end
但我一直收到错误:
工厂未注册:user(ArgumentError)
我肯定做错了什么,但我真的看不到它。哈哈,我需要一双额外的眼睛。这可能是什么问题?
答案 0 :(得分:1)
您未正确声明关联 - 使用user = FactoryGirl.create(:user)
基本上不起作用,因为在您定义工厂时无法保证声明用户工厂。
即使这个工作也比所有工厂都共享相同的用户记录,因为变量是在工厂定义的范围内创建的 - 而不是在FG初始化记录时运行的块。
您可以通过以下方式声明关联:
FactoryGirl.define do
factory :order do
user # FactoryGirl does lazy loading when the factory is used
status 1
delivery_preferences { "#{Faker::Address.street_address}, #{Faker::Address.city}." }
instant_delivery false
status_changes ["#{rand(5)}, #{Time.now}"]
order_products_ids { user.cart.order_products_ids[0..rand(3)] }
end
end