A Day in the Life

Ruby で解りにくい例外の発生元を調べる

Ruby で解りにくい例外の発生元を調べる

例えばインテグレーションテストで

Failure/Error: 
       expected there to be content Internal Server Error undefined method `name' for # WEBrick/1.3.1 (Ruby/1.8.7/2011-12-28) at 127.0.0.1:62045"
     # ./spec/integration/foo_spec.rb:174

みたいな例外が起きたとき、ぱっと見どこから呼び出させるのか解らなくて生きるのが辛い。name ぐらい汎用的な名前だと grep で引っかからないし。そんなときは

class Hash
  def name
    require 'pp'; pp caller.to_a
  end
end

みたいにオーバーライドしてメソッド定義しちゃうとあら簡単に解ります!特にこの場合なら spec/integration/foo_spec.rb の該当行らへんにかけば影響範囲も単体テストなら少なく探しやすい!

なんか泥沼っぽいですけど知っておくと便利!!同僚に教えて貰った。