Railsのminitestでtestが完走しない

rails testコマンドが動かない

最近Railsチュートリアルを進めています。

第3章でrails testでtestをする部分があるのですが、うまく動かなかったので解決法をメモ。

エラーログ

# Running:

......FF

Failure:
MicropostsControllerTest#test_should_update_micropost [app_name/test/controllers/microposts_controller_test.rb:38]:
Expected response to be a <3XX: redirect>, but was a <200: OK>


Traceback (most recent call last):
        27: from -e:1:in `<main>'

/** 省略 **/

/home/nagatch/.rbenv/versions/2.5.0/lib/ruby/gems/2.5.0/gems/railties-5.1.4/lib/rails/test_unit/reporter.rb:70:in `method': 
undefined method `test_should_update_micropost' for class `Minitest::Result' (NameError)

うまくいけば

16 runs, 19 assertions, 2 failures, 0 errors, 0 skips

と出てくるところが1つテストが失敗したところでundefined methodのエラーが発生しそれ以降のテストが止まってしまいます。

解決法

チュートリアル中のGemfile

group :test do
  gem 'rails-controller-testing', '1.0.2'
  gem 'minitest-reporters', '1.1.14'
  gem 'guard', '2.13.0'
  gem 'guard-minitest', '2.4.4'
end

と記述するところがあるのですが、そこに

gem 'minitest', '5.10.3'

を追加します。

上のGemfileでインストールされるminitestのバージョンは5.10.4なのですが、5.10.4ではminitest-reportersと相性が悪いらしく、エラーが発生するらしいです。

gem 'minitest', '5.10.3'

を追加することで明示的に5.10.3にダウングレードしています。

追加したら、

$ bundle update

を実行。

rails testすると…

/** 省略 **/

Finished in 0.951040s, 16.8237 runs/s, 19.9781 assertions/s.

  1) Failure:
MicropostsControllerTest#test_should_create_micropost [/mnt/c/Users/nagat/Desktop/Git/hello_app/test/controllers/microposts_controller_test.rb:19]:
"Micropost.count" didn't change by 1.
Expected: 3
  Actual: 2

  2) Failure:
MicropostsControllerTest#test_should_update_micropost [/mnt/c/Users/nagat/Desktop/Git/hello_app/test/controllers/microposts_controller_test.rb:38]:
Expected response to be a <3XX: redirect>, but was a <200: OK>

16 runs, 19 assertions, 2 failures, 0 errors, 0 skips



Finished in 1.003838s, 15.9388 runs/s, 18.9274 assertions/s.
16 runs, 19 assertions, 2 failures, 0 errors, 0 skips

うまくいきました。

(テストが通ってないのはご愛嬌)
(てかなんで自動生成のテストに引っかかってるのか分からない)

おしまい

2ヶ月ぶりの更新。
見事に三日坊主になってます(なんとかがんばります)