だれも参考にならないと思うけどJOBLISTのrspecを14分から4分に短縮したから褒めて2018-07-17だれも参考にならないと思うけどJOBLISTのrspecを14分から4分に短縮したから褒めてこんにちはこんにちは。セブンにある蒙古タンメン北極のカップラーメンににんにくのチューブたくさん入れて食べたらお腹がいたくなった辻@dim0627です。今回はちまちま直してたrspecの話をします。CIマジで遅い問題これほんとQOL下がる。いえば最近は開発時の体験をDXとか言うらしいですね。この問題は以前僕が居たときからあって、なんでかなーなんでかなーとあんまり真面目に調査せずに唸ってたんですが、今回もう堪忍袋の緒が切れたので遅いテスト全部ぶっ○してやる!!!というつよいきもちで対応しました。やったことというわけでやったことをまとめるけど、タイトルにある通りたぶんよくあるパターンじゃないです。suiteがどうとかexampleがどうとかそういうテクニカルな話は1個もでないよ!!まずは何が遅いのかを知ろうまあrspecが遅いのはわかってたんだけど一応みてみましょう。CIの設定は悪くないですね。完全にlintとtestが遅いですね。rspecはどれくらいかと言うと、ほとんどこいつやんけ!じゃあrspecが遅いのはわかったしバシバシ直していきます。遅いテストを探そううーん、まあ確かに遅いっちゃ遅いのもあるんだけど、ずば抜けて遅いのがあるわけじゃないし、なんか全体的に遅そう・・・。specに200を見るだけならfeatureじゃなくてrequestでよくない?という話になりまずこれを置き換えました。個人的にこれ結構はやくなるんじゃないかな〜!と思ってたんですがもう何も変わらず。わかりやすさ的に画面いじったりしないならrequestでいいよねということでこれはこれで全部やりました。DatabaseCleaner、truncationじゃなくてtransactionでよくない?もうね、結論からいうとこれ。😨これだけで10分短縮された。ここだとは思わなかった〜!DatabaseCleanerは3つのクリーニング方法があって、truncate、transaction、deletionなんだけど、まあtransactionが使えるならそれが一番はやいよとは公式にも書いてある。testing.この辺とりあえずコピペで使っちゃってたから調べる機会ができてラッキー!rspecよくわからないマンなんだけど、transactionとtruncationを切り替えながらテストを書くのが普通なんですか?Capybaraと併用するときはtransactionだとコネクションが違うから、未コミットのレコードが読めなくて困るらしいです。endでもなんか弊社は平気だったな。弊社のテストだいじょうぶか?(これ絶対ダメなので別記事にします)transactionにしたらここで躓いたよtransactionにしたら速くなったしグリーンだしハッピー!ってわけじゃなかったのでそこだけメモっときます!IDがインクリメントされていくのを考慮するなんかファクトリで作ったレコードのIDを憶測して1とか2で見てるテストがあって、それはダメだでした。transactionだとロールバックされた分のオートインクリメントは残るぽくて、そういうべた書きはやめてファクトリで作ったレコードのIDをちゃんと使うように変えました。テストがランダムに落ちるこれ解決してないので僕の今日の仕事です。JOBLIST派遣はてなブログをはじめよう!rista-incさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。