Rails 4 Paperclip FactoryGirl文件上传

4

我有一个FactoryGirl:product工厂,使用fixture_file_upload来设置image,这是一个Paperclip附件。

    image { fixture_file_upload "#{Rails.root}/spec/fixtures/images/product.png", 'image/png' }

fixture_file_upload可以正常使用,但是每次测试使用工厂创建新产品时,Paperclip会在publicproducts/<id>/original.png中创建一个新文件。这就是问题所在。在每次测试运行时填充publicproducts文件夹是不可接受的。

我能想到的第一种解决方法是在https://github.com/carrierwaveuploader/carrierwave/wiki/How-to:-Cleanup-after-your-Rspec-tests中提到的解决方案。

你是否以其他方式解决了这个问题?


1
你给出的链接是我认为最好的方式,我也使用同样的方法。我有一个名为upload_test的文件夹,其中包含附件,我也使用同样的方法将其清空。 - Deepesh
@Deep,是的,你说服我使用相同的方法。 - Anton Antonov
1个回答

12

Deep提到的解决方案是:

  • 指定测试环境中的Paperclip应该将文件上传到文件夹test_uploads
  • 修改Factory Girl工厂以上传来自例如spec/fixtures/images/filename.extension的夹具文件,
  • rails_helper.rb中添加一个清理块以进行所有后续清理。

代码如下:

config/environments/test.rb

  ...
  config.paperclip_defaults = {
    path: ':rails_root/test_uploads/:class/:id/:attachment/:filename.:extension',
    url: ':rails_root/test_uploads/:class/:id/:attachment/:filename.:extension'
  }
  ...

spec/factories/products.rb

image { fixture_file_upload "#{Rails.root}/spec/fixtures/images/product.png", 'image/png' }

rails_helper.rb

  ...
  include ActionDispatch::TestProcess

  config.after(:all) do
    if Rails.env.test?
      test_uploads = Dir["#{Rails.root}/test_uploads"]
      FileUtils.rm_rf(test_uploads)
    end
  end
  ...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接