Paperclip + rail3 + rspec でテストごとに作られたファイルを消す方法
Rails3+paperclipでファイルアップロードの最後で気づいたテストごとにファイルを消す方法。
基本的なコンセプトとしては、テスト時だけ保存場所を変えて、テストごとにそのディレクトリ配下をごそっと消す、という流れ。
config/environments/test.rb
config.paperclip_defaults = {:path => "#{Rails.root}/public/system/test/:class/:id/:style/:basename.:extension"}
spec/spec_helper.rb
RSpec.configure do |config| ~snip~ config.after(:each) do # Get rid of the linked images if Rails.env.test? FileUtils.rm_rf(Dir["#{Rails.root}/public/system/test/[^.]*"]) end end end
こんな塩梅すね。
追記)parallel_testを使うとこれだとコケる。テストごとにtestディレクトリ配下全部消すから、他のスレッドで使っているテストファイルを消しちゃうからだ。
なので、テスト全部が終わったら消すようにした。スレッドごとに評価される気がするので、これでもダメなときはダメかもしれないけど、5回連続でやってみたところではだいじょうぶだった。
spec/spec_helper.rb
RSpec.configure do |config| ~snip~ config.after(:suite) do # Get rid of the linked images if Rails.env.test? FileUtils.rm_rf(Dir["#{Rails.root}/public/system/test/[^.]*"]) end end end