Techioz Blog

Rubyで標準出力に出力されているすべての行を検索します

概要

Google は私を助けてくれません。私は print ステートメントやその類のものがたくさんある大規模な Rails プロジェクトを持っています。何かが印刷されていますが、何が印刷されているのかわかりません。仕様を見ましたが、印刷出力すべきものが見つかりません。

コンソールに出力される行番号を示す、rspec または Ruby に渡すことができるフラグはありますか?

それとも、grep コマンド EG grep -Rl ‘p “’ を使用して、これらすべての print ステートメントを追跡しようとするのでしょうか?

rspec の出力は次のようになります。

""
..*.****.......*****.........**.""
...""
.""
.""
.""
.""
.""
.""
.""
.""
.""
.""
.""
.""
.""
.""
.""
.""
.""
.""
...**.......""

解決策

そして変数です!テスト構成の早い段階 (おそらく spec_helper)

class MyIO < IO
  def puts(*)
    debugger
    super
  end
end

$stdout = $stderr = MyIO.new

MyIO には、StringIO や File など、より具体的なスーパークラスが必要になる場合があります。

おそらく、一度実行するだけで犯人を見つけることができるでしょう。表示しても問題ないもので頻繁に呼び出されていることに気付いた場合は、caller_is_whitelisted でない限り、デバッガー行を複雑なデバッガーになるように調整してください。

def caller_is_whitelisted
  return true if caller[2 (give or take)].matches(/some_file_that_may_print/)
  ...
  false
end

これはすべて非常に大まかなコードであり、非常にひどいものですが、重大な問題があり、それは一時的なものです。