単体だと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
いちいち開けたり閉じたりが面倒な場合もあるけど、テストの流れでちょっとした修正を入れたい時など、むしろ便利な場面も多いかなと。