リア充爆発日記

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

parallel_testsでRSpecのテストを高速化

テストが多くなってくると必然的に実行時間が長くなってしまう。
テストの書き方を工夫する余地があるうちはいいけど、それもきつくなってきたらもう後はマシンパワーに頼るしかない。

そこでこちらのparallel_testsです。
https://github.com/grosser/parallel_tests

CPUのコア数の応じて、テストを複数並行して走らせてくれる。

使い方はかんたんで、前述のURLのREADMEに書いてあるから読むべし。

が、最初は導入がうまくいかなかった。
テストごとにDBや画像のデータクリアを行っている関係上、画像アップロードのテストで、あるプロセスが作った画像を別のプロセスが消してしまってテストがコケる、という問題があったからだった。

画像アップロードにはCarrierwaveを使っていたのだけど、以下のようにして回避した。

image_uploader.rb

  def store_dir
    "system/#{Rails.env}#{ENV['TEST_ENV_NUMBER']}/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

spec_helper.rb

  config.after(:suite) do
    # Get rid of the linked images
    if Rails.env.test?
      FileUtils.rm_rf(Dir["#{Rails.root}/public/system/#{Rails.env}#{ENV['TEST_ENV_NUMBER']}"])
    end
  end


で、パラレルに走らせたら、4コアあるMBA13"(2012)で半分の時間で終わった。
これはでかいですよ。

エバニュー(EVERNEW) オレンジボーン  EBB002

エバニュー(EVERNEW) オレンジボーン EBB002