以下代码用于创建对象:
FactoryGirl.define do
factory :user do
name 'Some name'
phone '89277777777'
address 'Some address'
end
factory :order do
title 'Some title'
end
end
用户模型已获得has_many :orders
关联,是否可以将user
工厂传递给order
工厂?
提前致谢。
答案 0 :(得分:1)
是,如下:
FactoryGirl.define do
factory :user do
name 'Some name'
phone '89277777777'
address 'Some address'
end
factory :order do
user
title 'Some title'
end
end
在您的规格中:
FactoryGirl.create(:order)
将创建订单对象和关联的用户对象。
有关FactoryGirl with Rails的更多信息 - https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md
答案 1 :(得分:0)
是的,解决方案就像使用关联方法一样简单
factory :order do
title 'Some title'
association :user
end
可以缩短为
factory :order do
title 'Some title'
user
end
一句警告。只要模型的复杂性增加,这种方法往往会使您的应用程序变得非常慢。
事实上,如果您购买了与用户关联的订单等相关联,那么即使您不需要购买,也会创建所有相关记录。你的测试会在一段时间内变慢。
我建议您仅在需要时才use the traits to compose your associations。
factory :order do
title 'Some title'
trait :with_user do
user
end
end
FactoryGirl.create(:order, :with_user)
当我需要用户ID进行验证时,我通常也会使用:with_fake_user
,但我正在测试一些不需要访问用户的内容。
factory :order do
title 'Some title'
trait :with_user do
user
end
trait :with_fake_user do
user_id 0
end
end
FactoryGirl.create(:order, :with_user)
FactoryGirl.create(:order, :with_fake_user)