我有两个模型Project
和ProjectImage
。 project
必须至少有一个project_image
才有效。这在我的应用程序中设置得很好但是在测试时,我不确定如何处理它。
我有我的项目工厂:
factory :project do
title { Faker::Lorem.word(5) }
intro { Faker::Lorem.word(5) }
association :user, factory: :user
end
我的project_image工厂。
factory :project_image do
image { File.open(Dir.glob(File.join(Rails.root, 'sampleimages/projects', '*')).sample) }
association :project, factory: :project
association :user, factory: :user
end
显然,我的项目工厂无效,因为它需要至少有一个图像。所以我认为它需要一个关联,但是,这只会创建一个循环依赖。它们彼此依赖,所以我确定如何创造一个没有另一个。
答案 0 :(得分:1)
我认为你可以通过这种方式破解它
factory :project do
title { Faker::Lorem.word(5) }
intro { Faker::Lorem.word(5) }
association :user, factory: :user
after(:build) do |project|
FactoryGirl.build(:project_image, project: project)
end
end
PS你可以更容易地定义工厂
factory :project_image do
image { File.open(Dir.glob(File.join(Rails.root, 'sampleimages/projects', '*')).sample) }
project
user
end
PPS如果直接回答您的问题
所以我认为它需要一个关联,但是,这只会创建一个循环依赖
您可以将属性传递给工厂,它将使用它而不是您在文件工厂中定义的属性。示例:您需要一个包含3张图片的项目
project = FactoryGirl.create(:project) # this project has one picture created in factory
FactoryGirl.create_list(:project_image, 2, project: project) # this will create two pictures for existed project
project.reload # you need update local varial to fetch new records from DB
project.project_images.size # => 3