Rails 4 Paperclip FactoryGirl文件上传

时间:2015-07-27 10:40:11

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

我有一个FactoryGirl:产品工厂,使用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 个答案:

答案 0 :(得分:11)

Deep提到的解决方案是:

  • 指定测试环境中的回形针应将文件上传到文件夹test_uploads
  • 修改factory_girl工厂以从ex上传夹具。 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
  ...