RSpec 向けの tree コマンドを作った

RSpec の追記やレビューをしていると全体構造を把握するのが辛いときがある。context が根深くなっていたり、単純に行数が長くなっていたり。(そんなテストを書いちゃいかんというのもある)

せっかくなので Gem の勉強も兼ねて CLI ツールを作ってみた。

github.com

こんな感じで使うことができる。

$ rspec_tree all /path/to/your_spec.rb
desc: Sample
desc: First describe
├─────ctx: First context
├───────it: should do something
├───────ctx: First nested context
├─────────it: should do something
├───────it_behaves_like: shared example
desc: Second describe
├─────ctx: Second context
├───────it: should do something else

ちなみに RubyMine だとエディタ上で綺麗に表示する機能があるらしい。

VSCode には OUTLINE という類似機能があるが満足する表示内容ではなかった。

実装

実装は spec ファイルを文字列として受け取り eval を実行している。モンキーパッチも当てまくっておりなかなかにひどい内容になっている。とりあえずは目的に叶うので時間があるときに見直していきたい。

有識者の方から parser gem を使って構文木を作成してみたらどうかとアドバイスをいただいた。コードを実行する必要はなく、テスト構造をツリー形式で出力できればよいだけなのでこちらも試してみたい。