如何使用“Factory Girl ”生成Paperclip Attachment?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (19)

我有一个有许多图像的模型Person,其中的图像有一个名为Data字段,缩写后的版本如下所示:

class Person
  has_many :images
  ...
end

class Image
  has_attached_file :data
  belongs_to :person
  ...
end

人必须至少有一个图片附在上面。

在使用FactoryGirl时,我有类似于以下代码的代码:

Factory.define :image do |a|
  a.data { File.new(File.join(Rails.root, 'features', 'support', 'file.png')) }
  a.association :person
end

Factory.define :person do |p|
  p.first_name 'Keyzer'
  p.last_name 'Soze'
  p.after_create do |person|
    person.assets = [Factory.build(:image, :person => person)]
  end
  # p.images {|images| [images.association(:image)]}
end

我会得到一个类似于以下内容的错误:

No such file or directory - /tmp/stream,9887,0.png (Errno::ENOENT)

有时测试成功运行。

提问于
用户回答回答于

更新的fg语法和no包括必要的

factory :user do
  avatar { File.new(Rails.root.join('app', 'assets', 'images', 'rails.png')) }
end

或者,更好的是,

factory :user do
  avatar { File.new("#{Rails.root}/spec/support/fixtures/image.jpg") } 
end
用户回答回答于

include ActionDispatch::TestProcess在测试助手中,下面是一个示例:

factory :user do
  avatar { fixture_file_upload(Rails.root.join('spec', 'photos', 'test.png'), 'image/png') }
end

在上面的例子中,spec/photos/test.png在运行测试之前,需要存在于应用程序根目录中。

扫码关注云+社区