将Factory_girl与PaperClip 4.0一起使用

ste*_*ser 8 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
Run Code Online (Sandbox Code Playgroud)

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

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

ActiveRecord::RecordInvalid: Validation failed: Image translation missing: en.activerecord.errors.models.attachment.attributes.supporting_documentation.spoofed_media_type
Run Code Online (Sandbox Code Playgroud)

注意:PaperClip 3.X的原始讨论在这里:如何使用工厂女孩生成回形针附件?

Hay*_*all 4

该问题似乎是由media_type_spoof_detector 中的第 61 行引起的。

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
Run Code Online (Sandbox Code Playgroud)

您需要包含ActionDispatch::TestProcesstest_helper.rb

这是第一次在这里发布。