気ままに気ままのエンジニアブログ

定期的に得た知見を気ままに発信中

【Rails / チュートリアル】「rails testが動かない時」の解決法

こんにちは。

梅雨の季節は天パにとって天敵です。
せっかく髪セットしてるのに駅までの7分間ですでに髪がうねる。
それが非常に辛い。

どうもハチマキです。

はじめに

さて、今回はrailsチュートリアルを進めている中で、なぜかrails testがびくともしなくなり、固まる現象が起きました。
色々ググった結果、解消できたのでメモ程度に書いていきたいと思います。

本日の概要 : 「rails testが動かない時」の解決法

事象

$ rails testを実行したら固まる。またはエラーが発生した

エラー例

$ rails test
Running via Spring preloader in process 97274
2020-05-31 09:22:21 WARN Selenium [DEPRECATION] Selenium::WebDriver::Chrome#driver_path= is deprecated. Use Selenium::WebDriver::Chrome::Service#driver_path= instead.
Traceback (most recent call last):
 49: from -e:1:in `<main>'
 48: from /Users/ユーザ名/.rbenv/versions/2.6.4/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
 47: from /Users/ユーザ名/.rbenv/versions/2.6.4/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
 46: from /Users/ユーザ名/アプリケーション名/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.4.3/lib/active_support/dependencies.rb:285:in `load'
 45: from /Users/ユーザ名/アプリケーション名/vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.4.3/lib/active_support/dependencies.rb:257:in `load_d
 ・
 ・
 (省略)

問題点

ググった結果、

springはRailsアプリケーションのプリローダーとやらで、これが機能していると、
入力したrailsコマンドの起動が次から早くなるそうですが、運が良いと固まる事があるらしい。
※仮にstopさせたとしても、railsコマンドを入力した際に自動で起動するので大丈夫らしい。

とのことで、一旦springをstopさせるため下記を実行してみる

$ spring stop
rbenv: spring: command not found

The `spring' command exists in these Ruby versions:
  2.2.4
  2.5.0

解消できず。。別のエラーが出てくる。。

解決方法

解決方法は、※「sudo」を加えて、

  1. $ sudo gem install springを実行した後
  2. $ spring stopを再度実行する

※sudoとは:スーパーユーザー(rootユーザー)の権限経由でコマンドを実行する

$ sudo gem install spring
Fetching spring-2.1.0.gem
Successfully installed spring-2.1.0
Parsing documentation for spring-2.1.0
Installing ri documentation for spring-2.1.0
Done installing documentation for spring after 0 seconds
1 gem installed

$ spring stop
Spring stopped.

無事に止まりました!
そして再度$ rails testを実行したら無事に動きました。。

$ rails test
Running via Spring preloader in process 64338
Started with run options --seed 13936

 FAIL["test_should_get_home", Minitest::Result, 6.025406999979168]
 test_should_get_home#Minitest::Result (6.03s)
        <Home | Ruby on Rails Tutorial Sample App> expected but was
        <Ruby on Rails Tutorial Sample App>..
        Expected 0 to be >= 1.
        test/controllers/static_pages_controller_test.rb:7:in `block in <class:StaticPagesControllerTest>'

 FAIL["test_should_get_contact", Minitest::Result, 6.043967999983579]
 test_should_get_contact#Minitest::Result (6.04s)
        <contact | Ruby on Rails Tutorial Sample App> expected but was
        <Contact | Ruby on Rails Tutorial Sample App>..
        Expected 0 to be >= 1.
        test/controllers/static_pages_controller_test.rb:25:in `block in <class:StaticPagesControllerTest>'

  4/4: [===================================================================================================================================] 100% Time: 00:00:06, Time: 00:00:06

Finished in 6.04579s
4 tests, 8 assertions, 2 failures, 0 errors, 0 skips

testはred(エラー)でした笑