あるアプリケーションでRSpecを導入し、いざテストコードを実行したらエラーが出てしまった。
何度見直しても設定や記述に問題はないはずなのに、なぜ動かないのか。。
原因は「spring」というgemでした。
下記のコマンドをアプリのディレクトリで入力し、再度テストコードを実行すると正常に作動しました。良かった。
mac@ myApp % spring stop
Spring stopped. ←この表記が出ればOK
ちなみにこのspringはrailsコマンドを入力すると自動で再始動しますのでご安心を。
###このspringというのは何者?
簡単に言えば、railsのキャッシュみたいなものです。
rails newした際に、Gemfileにデフォルトで導入されています。
今回の場合だと、RSpecの導入をする前のキャッシュがたまたま残っており、
その状態でテストコードを実行すると「RSpecなんて使えないよ」っていうエラーが出てしまったようですね。
ちなみにspringの状態を確認するためにはこんな感じで確認できます。
mac@ myApp % spring status
Spring is running:
97404 spring server | myApp | started 10 secs ago
97405 spring app | myApp | started 10 secs ago | development mode
spring stop
→rails c
→exit
→spring status
の順番で入力するとこのようになります。
mac@ myApp % spring stop
Spring stopped.
mac@ myApp % rails c
Running via Spring preloader in process 97418
Loading development environment (Rails 6.0.3.2)
irb(main):001:0> exit
mac@ myApp % spring status
Spring is running:
97404 spring server | myApp | started 10 secs ago
97405 spring app | myApp | started 10 secs ago | development mode
ちなみに下記のコマンドではPC内で稼働してるspringを全て確認できます。
mac@ ps aux | grep spring
mac 97139 101.0 0.5 4370124 43216 ?? Rs 2:24AM 0:00.73 spring app | myApp3 | started 0 secs ago | development mode
mac 97106 0.2 0.3 4352516 24104 s002 S 2:24AM 0:00.42 spring server | myApp3 | started 39 secs ago
mac 96929 0.0 1.2 4462288 100216 ?? Ss 2:20AM 0:03.23 spring app | myApp2 | started 4 mins ago | development mode
mac 77394 0.0 0.1 4352516 8816 ?? S 05PM 0:01.03 spring server | myApp2 | started 56 hours ago
mac 4764 0.0 0.0 4486444 472 ?? Ss 5 720 1:18.61 spring app | myApp1 | started 439 hours ago | development mode
mac 4760 0.0 0.0 4351492 432 ?? S 5 720 0:01.58 spring server | myApp1 | started 439 hours ago
mac 97142 0.0 0.0 4276476 696 s002 S+ 2:24AM 0:00.00 grep spring
killコマンドでもstopできるのかな、と思い実行してみましたがすぐ復活して止めることはできませんでした。
やはり該当のディレクトリに移動し、素直にspring stop
した方が良さそうです。