如何在工厂生产工厂的不同对象?

时间:2014-07-25 16:02:44

标签: ruby-on-rails ruby-on-rails-4 factory-bot

用户模型的工厂

factory :user do
  name Faker::Name.name
  provider 'facebook'
  provider_user_id '1232'
  email Faker::Internet.email
 encrypted_password Faker::Internet.password
 end 

这是照片模型的工厂,它使用用户模型的对象。

factory :photo do
user  FactoryGirl.create(:user)
image Rack::Test::UploadedFile.new(File.join(Rails.root,'spec','GIV_jpg_file_small.jpg')
end

现在在评论工厂中,我们正在创建用户和照片的对象。但照片也有 用户的对象。因此,factoryGirl为照片和评论对象提供相同的用户对象。但我的要求是我需要不同的用户对象。照片工厂的一个用户对象和评论工厂的一个用户对象。

factory :comment do
 user 
 photo
 content Faker::Lorem.paragraph
 end
end

在这方面,有人能帮助我吗? 提前谢谢。

1 个答案:

答案 0 :(得分:1)

我认为你不应该在工厂内部运行FactoryGirl定义。

factory :user do
  name Faker::Name.name
  provider 'facebook'
  provider_user_id '1232'
  email Faker::Internet.email
  encrypted_password Faker::Internet.password
end 

factory :photo do
  user  
  image
end

factory :comment do
  user 
  photo
  content Faker::Lorem.paragraph
end

现在在您的测试套件中,您可以执行以下操作:

user1 = create(:user) # Or FactoryGirl.create(...) if you are NOT using RSpec
user2 = create(:user)

photo = create(:photo, :user => user1, :image = >Rack::Test::UploadedFile.new(File.join(Rails.root,'spec','GIV_jpg_file_small.jpg'))  )
comment = create(:comment, :photo => photo, :user => user2);

嗯,我觉得你明白了:)