Railsチュートリアルを勉強していて原因不明のバグに遭遇したので対処方法を記録しておきます。
環境
ホストマシン:macOS Catalina 10.15.4
関係してそうなGemのバージョン:
gem 'rails', '6.0.3'
gem 'spring', '2.1.0'
gem 'rails-controller-testing', '1.0.4'
gem 'minitest', '5.11.3'
#エラー
###発生条件
詳細は不明ですが、いろいろなタイミングで発生しました。rails generateコマンドでControllerを作った後などに頻発。
###エラー内容
テストがGreenになるはずの状況でrails test コマンドでエラーが出る。しかもエラーの原因箇所を特定不能。
2000行以上にわたる大量のログ(おそらくGemのパスを示している)が吐かれたのちに以下のエラーメッセージ。
[NOTE]
You may have encountered a bug in the Ruby interpreter or extension libraries.
Bug reports are welcome.
For details: https://www.ruby-lang.org/bugreport.html
[IMPORTANT]
Don't forget to include the Crash Report log file under
DiagnosticReports directory in bug reports.
Traceback (most recent call last):
5: from -e:1:in `<main>'
4: from /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
3: from /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
2: from /Library/Ruby/Gems/2.6.0/gems/minitest-5.11.3/lib/minitest.rb:63:in `block in autorun'
1: from /Library/Ruby/Gems/2.6.0/gems/minitest-5.11.3/lib/minitest.rb:140:in `run'
/Library/Ruby/Gems/2.6.0/gems/activesupport-6.0.3/lib/active_support/testing/parallelization.rb:124:in `shutdown': Queue not empty, but all workers have finished. This probably means that a worker crashed and 7 tests were missed. (RuntimeError)
冒頭の[NOTE]にあるようにライブラリ関連のバグなのでしょうか。
#対処方法
ターミナルに以下のコマンドを打ち込んでspringを再起動する
rm bin/spring
pkill -9 -f spring
これは推測になりますが追加したファイルの内容が正確に読み込まれていないのが原因かもしれません。このようなバグがあるとTDDの効率は著しく下がってので辛いです。本来はGreenなテストがコード以外の部分が原因でRedになってしまうという厄介なバグでした。
#追記
Railsチュートリアル内にも対処方法の記述がありました。記載箇所は第3章。
bin/spring stop # テストが原因不明で動かなくなったら、このコマンドを実行してみる
とにかくspringとやらを一回止めることが大事らしい。springが一体何者なのか...誰か教えてください😂