とある Web アプリケーションのテストの総実行時間が5分を超えてきたので parallel_tests を導入してみた。この Web アプリケーションはいわゆるマスタデータがなく、都度 db:test:prepare を実行するのを前提にテストが作られている。
しかし、parallel_tests な環境だとそれぞれのプロセスが db:test:prepare を実行してくれないという困る状態だったので、以下のようなコードを Rakefile に書いて parallel:spec 実行時には問答無用で parallel:prepare を実行するようにした。
Rake::Task['paralell:spec'].enhance(['paralell:prepare'])
database_cleaner 使ってテスト毎にデータベースを保全するという方法もあったんだけど、Web アプリケーション以外のデータベースを操作して、そのトランザクション状態を検証するというコードも入っていたりするので、上の方法を採用してしまった。