Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

問題

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
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした