テストをバラバラに実行して時間節約

僕はRailsではRSpecは使ってなくて普通に標準のTest::Unitのやつ?あれを使って、unitテストなら

rake test:units

functionalなら

rake test:functionals

と、ごく普通に使ってるんだけど、もうtest:unitsもtest:functionalsも一回実行するのに時間がかかりすぎるようになった。といっても長くて10分いかない感じなんだけど。
それでもテストしてすぐ結果が出てすぐ直して、続きを書きたいのに待ち時間が長くてついついBlog見に行ったりしちゃって逆に続きを書き始めるのが20分後になったりする。そこらへんが僕のダメなところなんだけど。


時間がかかる理由は色々あると思うけど、fixturesに入ってるデータがやたらおおいとか、メール送受信が間にあるとか、file_columnのテストがあるとか。特にfile_columnは各テストメソッドごとにセットアップでサムネイル作成したりしてるから特に時間がかかる。。

とにかく、unitsとかfunctionalsとかの単位じゃもうでかすぎる!
そんなわけでファイルごとに実行するようになった。こんな感じに。

ruby test/functionals/hoge_controller_test.rb

だけど、hoge_controllerの中のメソッドが全部file_column使ってるとかだとセットアップ処理重かったりするし、それでもメソッドは細かく切りたかったりするしで時間がかかることもある。
だからやっとrubyで指定したメソッドだけ実行する方法を学んで、今対象にしてるテストメソッドだけ実行することにした。
メソッド指定は--nameで指定できることを知った。

ruby test/functionals/hoge_controller_test.rb --name=test_upload

とりあえずテストメソッドごとに実行してOKになったら次のテストメソッドを実行することにした。

こんな流れ。

  1. テストメソッド作成
  2. テストメソッド実行
  3. テスト対象メソッド修正したりテストメソッド修正したり
  4. テストメソッド追記
  5. 1〜4の繰り返し
  6. ある程度テストメソッドが揃ったらunitsやfunctionals単位でテスト実行
  7. テスト成功したらコミット

ちなみにどうしても僕はテストを一気に書いておくとかできない。文法ミスとか余裕でしちゃうし、まとめてテストすると直すときどこから手を付けたらいいかわかんなくなっちゃうし。