Railsチュートリアルの12章で統合テスト実行時に302: Foundが出る場合の対処法


##問題
[12.3.3 パスワードの再設定をテストする](https://railstutorial.jp/chapters/password_reset?version=5.0#sec-password_reset_test)のテスト実行に失敗する。

##エラーの原因
PasswordResetsControllerTestで、302エラーが返ってくるため、テストに失敗する。

```irb
yokoyan:~/workspace/sample_app (password-reset) $ rails test
Running via Spring preloader in process 4508
Started with run options --seed 23235

 FAIL["test_should_get_edit", PasswordResetsControllerTest, 1.433484478999162]
 test_should_get_edit#PasswordResetsControllerTest (1.43s)
        Expected response to be a <2XX: success>, but was a <302: Found> redirect to <http://www.example.com/>
        test/controllers/password_resets_controller_test.rb:11:in `block in <class:PasswordResetsControllerTest>'

  47/47: [=====================================================================================================================] 100% Time: 00:00:02, Time: 00:00:02

Finished in 2.42694s
47 tests, 205 assertions, 1 failures, 0 errors, 0 skips
```

##根本的な原因
[12.1.1 PasswordResetsコントローラ](https://railstutorial.jp/chapters/password_reset?version=5.0#sec-password_resets_controller)にて、作成しなくても良いテストを作成していたため。
（PasswordResetsControllerTestは作成しなくて良いテスト）

以下、実行したコマンド。
「--no-test-framework」と打つべきところを、「--no--test-framework」とタイプしているため、テストケースが作成されてしまっていた。

```irb
yokoyan:~/workspace/sample_app (password-reset) $ rails generate controller PasswordResets new edit --no--test-framework
Running via Spring preloader in process 1737
Expected string default value for '--jbuilder'; got true (boolean)
Expected string default value for '--helper'; got true (boolean)
Expected string default value for '--assets'; got true (boolean)
      create  app/controllers/password_resets_controller.rb
       route  get 'password_resets/edit'
       route  get 'password_resets/new'
      invoke  erb
      create    app/views/password_resets
      create    app/views/password_resets/new.html.erb
      create    app/views/password_resets/edit.html.erb
      invoke  test_unit
      create    test/controllers/password_resets_controller_test.rb
      invoke  helper
      create    app/helpers/password_resets_helper.rb
      invoke    test_unit
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/password_resets.coffee
      invoke    scss
      create      app/assets/stylesheets/password_resets.scss
```

##対策
不要なテストを消す。

```irb
rm test/controllers/password_resets_controller_test.rb
```

##再度テストを実行する
無事に動くようになりました。
めでたしめでたし。

```irb
yokoyan:~/workspace/sample_app (password-reset) $ rails test
Running via Spring preloader in process 4725
Started with run options --seed 25295

  45/45: [==================================================================================================] 100% Time: 00:00:02, Time: 00:00:02

Finished in 2.21907s
45 tests, 203 assertions, 0 failures, 0 errors, 0 skips
```

##注意点
一度、`rails generate`でPasswordResetsControllerTestを作成してしまった後に、
再度正しいオプションで、`rails generate`をしても、PasswordResetsControllerTestは消えないので注意。むしろ他の必要なファイルがコンフリクトしまくりで被害が拡大。

```irb
yokoyan:~/workspace/sample_app (password-reset) $ rails generate controller PasswordResets new edit --no-test-framework
Running via Spring preloader in process 4624
Expected string default value for '--jbuilder'; got true (boolean)
Expected string default value for '--helper'; got true (boolean)
Expected string default value for '--assets'; got true (boolean)
Overwrite /home/ubuntu/workspace/sample_app/app/controllers/password_resets_controller.rb? (enter "h" for help) [Ynaqdh] 
       force  app/controllers/password_resets_controller.rb
       route  get 'password_resets/edit'
       route  get 'password_resets/new'
      invoke  erb
       exist    app/views/password_resets
    conflict    app/views/password_resets/new.html.erb
  Overwrite /home/ubuntu/workspace/sample_app/app/views/password_resets/new.html.erb? (enter "h" for help) [Ynaqdh] n
        skip    app/views/password_resets/new.html.erb
    conflict    app/views/password_resets/edit.html.erb
  Overwrite /home/ubuntu/workspace/sample_app/app/views/password_resets/edit.html.erb? (enter "h" for help) [Ynaqdh] n
        skip    app/views/password_resets/edit.html.erb
      invoke  helper
   identical    app/helpers/password_resets_helper.rb
      invoke  assets
      invoke    coffee
   identical      app/assets/javascripts/password_resets.coffee
      invoke    scss
   identical      app/assets/stylesheets/password_resets.scss
```