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 の該当行らへんにかけば影響範囲も単体テストなら少なく探しやすい!
なんか泥沼っぽいですけど知っておくと便利!!同僚に教えて貰った。