将Factory_girl与PaperClip 4.0一起使用

时间:2014-02-03 22:29:41

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

有没有人知道使用factory_girl创建PaperClip 4.0附件的正确方法,绕过任何PaperClip处理和验证?

我以前只能在我的工厂做以下事情:

factory :attachment do
  supporting_documentation_file_name { 'test.pdf' }
  supporting_documentation_content_type { 'application/pdf' }
  supporting_documentation_file_size { 1024 }
  # ...
end

这基本上会让PaperClip认为有一个有效的附件。

从3.5.3升级到4.0后,我现在收到验证错误:

ActiveRecord::RecordInvalid: Validation failed: Image translation missing: en.activerecord.errors.models.attachment.attributes.supporting_documentation.spoofed_media_type

注意:PaperClip 3.X的原始讨论在这里:How Do I Use Factory Girl To Generate A Paperclip Attachment?

1 个答案:

答案 0 :(得分:4)

此问题似乎是由line 61 in media_type_spoof_detector引起的。

Paperclip正试图找到"文件的mime类型"你上传了。如果没有,则验证失败,以保护您免受文件类型欺骗。

我自己没有尝试过,但也许最好的办法是使用真实文件,然后使用fixture_file_upload中的ActionDispatch::TestProcess方法进行设置。

factory :attachment do
   supporting_documentation { fixture_file_upload 'test.pdf', 'application/pdf' }

   # This is to prevent Errno::EMFILE: Too many open files
   after_create do |attachment, proxy|
     proxy.supporting_documentation.close
   end
end

您需要在ActionDispatch::TestProcess

中加入test_helper.rb

这是第一次发布here