てrspecを使う分には全く不要な知識なので、余程のことが無い限りここから先を読む必要はありません。
--
諸事情で rspec
コマンドを引数無しで実行した際に spec ディレクトリ以下の xxx_spec.rb ファイルが指定される流れを追ったので、それを記録として書き残す。バージョンは3.5.4とする
-
rspec
コマンドを実行するとRSpec::Core::Runner.invoke
が実行される。 -
RSpec::Core::Runner.invoke
するとRSpec::Core::ConfigureOptions
が作られ、RSpec::Core::Parser
が呼び出された結果、@options
インスタンス変数に{:files_or_directories_to_run=>[]}
が追加される。 - その後
RSpec::Core::Runner#run
が実行され、その過程で先程のRSpec::Core::ConfigureOptions
に対し#configure
が実行される とRSpec::Core::ConfigureOptions#process_options_into
が呼ばれ、その中で先程の@options
の値からRSpec::Core::Configuration#files_or_directories_to_run=
が引数無しで実行される。 - 引数が無いので
default_path
が使われ、そのdefault_path
に"spec"
が入っている。 - こうして
RSpec::Core::Configuration#files_or_directories_to_run
が["spec"]
になり、RSpec::Core::Configuration#files_to_run
に spec 以下の xxx_spec.rb が入る。RSpecはテストでこの#files_to_run
を使う。