元々の状況・課題
Rubyでチケット料金モデリングに挑戦中。
Rspecでテストを書いているが、ターミナルに毎回Rspecコマンドを入力するのが面倒になった。
目的
Rspecを簡単に実行したい。
やったこと・結果
①Rakeというライブラリを使った。
②ターミナルにrakeコマンドを入力するだけで、全てのspecファイルが一括で実行できるようになった。
③楽になりました。
Rakeとは(ざっくり)
Rakefileに実行したいことを書いて、Rakefileに書いた内容をrakeコマンドで簡単に実行できる。
ターミナルに長々とコマンドを打たなくても良くなる。
ディレクトリ構成は、ざっくりですがこんな感じです。
├── lib
│ ├── user.rb
│ └── ticket.rb
│
├── spec
│ ├── user_spec.rb
│ └── ticket_spec.rb
│
│── Rakefile ※手順2で作成します。
やったことの手順
1. rakeのインストール
gem install rake
2. Rakefileを作成し、Rakefileにコードを書く。
① require "rspec/core/rake_task"
##これでrakeコマンドのみで,③が実行できる。
② task :default => :spec
##rakeコマンドを実行した際に、rspecディレクトリ配下のファイルを自動でテストファイルとして認識し、テストを実行する。
③ RSpec::Core::RakeTask.new(:spec)
(補足説明)
・こちらにspecディレクトリ配下のファイルを指定している旨のコードがあります。
・③について、こちらの記事が勉強になりました。
「::」は、「クラス」や「モジュール」や「メソッド」の呼出しです。
または「::」は、名前解決をする際に入れ子(ネスト)環境下での場所を特定します。
単純に言うと、場所を特定します。(概念を分かりやすく説明するのは難しいです)
「RSpec」クラスを呼び出す場合 → RSpec
「RSpec」クラスの中の「Core」クラス or モジュール or メソッドを呼び出す場合 → RSpec::Core
「RSpec」モジュールの中の「Core」モジュールの中の「RakeTask」モジュールを呼び出す場合 → RSpec::Core::RakeTask
3. rakeコマンドの実行
ターミナルで、rakeコマンドを実行すると、specディレクトリ配下の**_spec.rb
が一括で実行されます。
rake
参考
- https://docs.ruby-lang.org/ja/latest/library/rake.html
- https://rubydoc.info/github/rspec/rspec-core/RSpec/Core/RakeTask
- https://msp-greg.github.io/rspec/RSpec/Core/RakeTask.html
- https://github.com/rspec/rspec-core/blob/main/lib/rspec/core/rake_task.rb#L28-L28
- https://qiita.com/hikao/items/36d514cc4e6349bb40cd
- https://go-journey.club/archives/7695#Rake_%E3%81%A8%E3%81%AF%EF%BC%9F