Spork
今のプロジェクトで使っているRailsのバージョンが3系列なこともあり、最近は4系列の話ばかりWeb上の情報を拾ってしまうので、まとめたことなどをメモしておく。
Sporkはテスト時のRailsサーバを予め起動しておいてテスト実行時間を短縮してくれるものという認識。
プロジェクトの方針としてなるべくユニットテスト書きましょうよって話になり、これまでも場当たり的にかかれていたのをきっちりやりましょうよということで、きっちり環境整備。Spork*1自体はプロジェクトのGemfileに入っていたのだけど、頻繁にブランチを切り替えるような使い方になると都度都度立ち上げ直すのもだるいので、プロジェクトとは別に導入。
gem install spork
後はコマンド叩いて起動。自分の開発環境ではtmuxinatorを導入してRailsサーバ、rails consoleなどを一斉に立ち上げているのでsporkも同様に立ち上げています。後、開発サーバがあってそこでみんなが揃って開発しているような場合、sporkの使用するポート番号がかぶるのでexport RSPEC_DRB=33334
のように環境変数設定しておく。これをしておかないとrspec test.rb
みたいにコマンド叩いてrspecを起動したときにデフォルトポートを使用しているsporkに接続して、意図と違うRailsサーバでテストを開始しようとするので注意。
テストでの悩みどころ
- プロジェクト柄、DB構造が結構複雑になっていてテストデータつくるのが大分つらい
- テストケースもいろいろ考えられるので、このへんに時間かかるのは仕方ないと思いつつもうちょっとらくできないかと思う
- Ralisのバージョンアップが速いので、どれがどのバージョンの情報なのかわかりづらい
- 常に最新バージョン使い続けるというものであればいいのだけど、移行も時間かかるしのう
- Rspecにしても記述方法かわってたりして、なかなか大変
とにかくテストデータ周りはFactoryGirl導入とかそういう話ではなく、もともとの仕様が複雑になってるところが要因なのでなんとか楽にしたいなーと思う。プロジェクト内でもそろそろ技術的負債*2を返すための期間を設けようか、という話も出てきているので何かしらネタを考えておきたいな。
*1:Rails4系列ならrails/springなんだろうし、Rails3.2なら導入できたんだろうけどいろいろお察しである。
*2:出ましたねこのワード