RSpec の追記やレビューをしていると全体構造を把握するのが辛いときがある。context が根深くなっていたり、単純に行数が長くなっていたり。(そんなテストを書いちゃいかんというのもある)
せっかくなので Gem の勉強も兼ねて CLI ツールを作ってみた。
こんな感じで使うことができる。
$ 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 だとエディタ上で綺麗に表示する機能があるらしい。
RubyMineでRSpecの階層構造をツリー表示できるのを初めて知った。
— Junichi Ito (伊藤淳一) (@jnchito) 2018年2月27日
describeやitがたくさんあるspecファイルだと目的のテストコードを探すのにすごく便利やん! pic.twitter.com/Z7ybhSeyh8
VSCode には OUTLINE
という類似機能があるが満足する表示内容ではなかった。
実装
実装は spec ファイルを文字列として受け取り eval を実行している。モンキーパッチも当てまくっておりなかなかにひどい内容になっている。とりあえずは目的に叶うので時間があるときに見直していきたい。
有識者の方から parser gem を使って構文木を作成してみたらどうかとアドバイスをいただいた。コードを実行する必要はなく、テスト構造をツリー形式で出力できればよいだけなのでこちらも試してみたい。