環境
OS:Windows10
Rails環境:WSL
エディタ&ターミナル:VSCode
Railsのソース変更がテスト実行に反映されない
Railsチュートリアル第3章のわざとテストを失敗させて、徐々に解消していく作業を行っていた時に、ソースコードの変更が反映されず、チュートリアル通りのエラーメッセージが表示されない現象が起きました。
以下のようなエラーから一切変わらなかったので
StaticPagesControllerTest#test_should_get_contact:
NameError: undefined local variable or method `static_pages_contact_url' for #<StaticPagesControllerTest:0x007fffe51b14e8>
test/controllers/static_pages_controller_test.rb:28:in `block in <class:StaticPagesControllerTest>'
その文言で調べたところ同じような人が・・・
Ruby on Rails チュートリアル3章のテストのバグとその対応メモ
Rails、minitestのバージョンを変更しまくる
私の環境ではチュートリアルよりも新しいバージョンのRailsを使用していたので(6.0.2.2)、まさしくこれかな?と思い
参考に、minitest、Railsのバージョンを変更してみるが・・・ダメ。
いろんなバージョンの組み合わせでもダメ・・・。
Rubyのバージョンも変えてもダメ・・・。
チュートリアルと全く一緒のバージョン、gemファイルの内容にしてもダメ・・・。
キャッシュか?
キャッシュか?と思ってググって
Rails tmp:clear
bin/rails r 'Rails.cache.clear'
等を試してみたがダメ・・・。
しまいにはアプリケーションルート直下のtmp
フォルダを無理やり頑張ってコマンド上から全削除してみたがダメ。
というかRailsが動かなくなり、再インストールするハメに・・・。
app/enviroment/test.rb
のconfig.cache_classes
やconfig.action_controller.perform_caching
もfalse
にしてみたが変化なし。
この時点で半日くらい潰れた・・・。
なぜかrails server
でブラウザでアクセスすると、変更は反映されているようでした。
rails s
springが原因の可能性
その後もググりまくっているとspring
というものがrailsコマンドの実行を早めるためにキャッシュしているとかなんとか・・・。
たしかにこのspring
はgemファイルの中身やrails t
実行時のコンソール出力内で見かけたなぁ・・・と思い、こいつを停止させてみることに
bin/spring stop
停止されたか確認するためbin/spring status
test@DESKTOP-SAU5360:~/sample_app$ bin/spring status
Spring is not running.
test@DESKTOP-SAU5360:~/sample_app$
止まっている模様。
この状態からrails t
でテスト実行したところ
うまくいきました
解決まで計8時間くらいかかりました。
時間を返して~
私の環境が悪いのかな・・・。
そもそもみんなWSLじゃなくCloud9だから、こんなこと起きないか!?
今後もテストを流す際は毎回これをしなきゃいけないのはめんどいなぁ・・・。もう止めておくか。
gemでtestの時に除外すればいいのか!?