Railsエンジニアの越川です。
よく、テストでRails.cache
を使ったテストをしたいけれども、テストの度に念のため消しておきたいという事情でspec/rails_helper.rb
に
config.before(:each) do Rails.cache.clear end
このように書いていたりします。
このRails.cache.clear
ですが、cacheをdefaultのFileStore
にしていると、tmp/cacheの中身を消すようです。
この時、sass
などを使っているプロジェクトの場合、tmp/cache/assets/
配下も一緒に消されてしまいます。これに気づかないとfeature spec
を実行するたびにsass
のコンパイルが走ってしまい何故かfeature spec
がべらぼうに遅い!という自体が起きてしまいます。本格的にsass
を使っているほど顕著です。
実際、poltergeist
をDriver
に設定したfeature spec
が極端に遅いケースが有り、試しにレイアウトファイルからstylesheet_link_tag
を消してみたところ、高速に実行できるようになったことから、cssのレンダリング、もしくはsassのコンパイルに時間がかかることを突き止めました。
簡単な解決策は、test
時のcache
をmemory
に変えることです。config/environments/test.rb
を修正しましょう。
Rails.application.configure do config.cache_store = :memory_store end
こうすることで、Rails.cache.clear
の対象がtmp/cache
ではなくなるので、tmp/cache/assets/
が消えなくなります。
マネーフォワードでは日々テストを改善していきたいエンジニアを募集しています。 みなさまのご応募お待ちしております!