Rails 4 Paperclip FactoryGirl文件上传中
Rails 4 Paperclip FactoryGirl file uploading
我有一个 FactoryGirl :product 工厂,它使用 fixture_file_upload
设置 image
,这是一个回形针附件。
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
中提到的解决方案
你有没有用其他方法解决这个问题?
Deep 也提到的解决方案是:
- 指定测试环境中的回形针应将文件上传到文件夹
test_uploads
,
- 修改 factory_girl 工厂以从 ex.
spec/fixtures/images/filename.extension
,
- 在
rails_helper.rb
中添加一个after all cleanup块
在代码中:
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
...
我有一个 FactoryGirl :product 工厂,它使用 fixture_file_upload
设置 image
,这是一个回形针附件。
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
中提到的解决方案你有没有用其他方法解决这个问题?
Deep 也提到的解决方案是:
- 指定测试环境中的回形针应将文件上传到文件夹
test_uploads
, - 修改 factory_girl 工厂以从 ex.
spec/fixtures/images/filename.extension
, - 在
rails_helper.rb
中添加一个after all cleanup块
在代码中:
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
...