Rspec测试环境下CarrierWave config.enable_processing=false不生效问题
核心原因
config.enable_processing = false 仅会禁用图片裁切、多版本生成这类处理逻辑,不会阻止原始文件的存储。你当前测试环境配置的是:file存储策略,会默认把文件写入public/test对应目录,这是文件持续生成的根因。
所需修改配置
1. 调整CarrierWave测试环境存储策略
把测试环境的存储替换为CarrierWave自带的测试存储,该模式下文件仅存在于内存,不会写入本地磁盘。修改carrierwave.rb的测试环境配置:
if Rails.env.test? CarrierWave.configure do |config| config.storage = :test # 替换原有:file配置 config.enable_processing = false config.delete_tmp_file_after_storage = true end else # 保留原有其他环境逻辑 end
2. 优化工厂的文件挂载写法
原有File.new的写法容易触发不必要的存储逻辑,替换为测试场景专用的上传对象,修改factories.rb:
factory :company do name { 'stackoverflow' } logo { Rack::Test::UploadedFile.new(Rails.root.join('spec', 'fixtures', 'companies', "1.png"), 'image/png') } end
注:如果项目没加载Rack::Test,可先在Gemfile的test分组引入rack-test依赖。
3. (可选)新增测试兜底清理逻辑
如果仍有特殊场景会生成残留文件,可在rails_helper.rb中添加测试套件跑完后的自动清理钩子:
RSpec.configure do |config| # 保留原有其他配置 config.after(:suite) do FileUtils.rm_rf(Dir["#{Rails.root}/public/test/"]) end end
内容的提问来源于stack exchange,提问作者georges
相关产品推荐
相关产品推荐

