リア充爆発日記

You don't even know what ria-ju really is.

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