単体だとreload!
の無いpry
。pry-rails
ならコマンド入るけど、そうでなければコードをいじるたびに再起動とか面倒。
でも、pry
上でエディタ起動してファイルを編集すれば、コードがリロードされるだけでなくオブジェクト再作成などテストの流れをやり直さなくて良くて便利だったのでメモ。
まず、エディタはvim
を使いたいので.pryrc
で指定しておく。
.pryrc
Pry.config.editor = "vim"
で、とりあえず簡単なテストクラスを作成。
/tmp/my_class.rb
class MyClass
def initialize
@create_time = DateTime.now
end
def foo
puts "created at #{@create_time}."
end
end
pry
で動かしてみる。
pry
[1] pry(main)> require '/tmp/my_class'
=> true
[2] pry(main)> x = MyClass.new
=> #<MyClass:0x007fbbebd03848
@create_time=
#<DateTime: 2014-01-19T23:35:08+09:00 ((2456677j,52508s,39159000n),+32400s,2299161j)>>
[3] pry(main)> x.foo
created at 2014-01-19T23:35:08+09:00.
=> nil
というところで、先ほどのクラスを編集。
pry
[4] pry(main)> edit /tmp/my_class.rb
ここで先ほどエディタとして指定したvim
が起動するので、適当に編集。今回はfoo
メソッドの出力するメッセージを気持ち変えてみただけ。
/tmp/my_class.rb
class MyClass
def initialize
@create_time = DateTime.now
end
def foo
puts "edited. but still created at #{@create_time}."
end
end
保存してvim
を終了させると、pry
に戻る(自動的にコードは再読み込みされている)。
Railsのreload!
だと、リロード後はインスタンスの再作成からやらなければならないが、この形であれば、すぐに続きのテストが出来る。
pry
[5] pry(main)> x.foo
edited. but still created at 2014-01-19T23:35:08+09:00.
=> nil
いちいち開けたり閉じたりが面倒な場合もあるけど、テストの流れでちょっとした修正を入れたい時など、むしろ便利な場面も多いかなと。