LoginSignup
3
0

More than 5 years have passed since last update.

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

Posted at

問題

12.3.3 パスワードの再設定をテストするのテスト実行に失敗する。

エラーの原因

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

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コントローラにて、作成しなくても良いテストを作成していたため。
(PasswordResetsControllerTestは作成しなくて良いテスト)

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

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

対策

不要なテストを消す。

rm test/controllers/password_resets_controller_test.rb

再度テストを実行する

無事に動くようになりました。
めでたしめでたし。

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は消えないので注意。むしろ他の必要なファイルがコンフリクトしまくりで被害が拡大。

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
3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0