Ruby on Railsチュートリアルの第3章の3.6.2 Guardによるテストの自動化の際に以下のエラーが発生しました。
No such file or directory - bin/rails test test/controllers/static_pages_controller_test.rb test/test_helper.rb
そこで色々調べたところ、いくつかのサイトではGuardfileの冒頭の部分から「spring: "bin/rails test"」を削除すれば動くとありました。
確かにこれでも動きましたが、そもそもこの操作をしてしまったらその前で言及している
この行ではGuardからSpringサーバーを使って読み込み時間を短縮しています (SpringはRailsの機能の1つです)。
を無視してしまっているのではないかと思ったのです。
とはいえ、該当の部分に原因があるのは明らかなので色々と試したところ、"bin/rails test"の部分をコンソールからコマンドで実行するときと同様に”rails test”に修正したところ問題なく動きました。
guardfile
# Guardのマッチング規則を定義
guard :minitest, spring: "rails test", all_on_start: false do
watch(%r{^test/(.*)/?(.*)_test\.rb$})
おそらくこの修正ならば言及されていたSpringサーバーの機能を使いつつ、問題なく動かせるのではと思います。
ただ、コンソールからは"bin/rails test"とコマンドを打っても問題なく動くので、bundleを通して実行する場合は”bin/rails”に上手くパスが通っていないのかなと思います…(もしかしたらチュートリアルで言及されていたGuardとSpringが相互に作用するバグのせいなのかもしれません。)
ここのあたりの原因は自分でも探りきれていないので、どなたか知見のある方がいましたら教えていただけると助かります。