質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

0回答

282閲覧

rails tutorial(第10章)のテストで、エラーが出てしまう

ym1111

総合スコア16

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2021/04/01 14:10

編集2021/04/01 15:15

前提・実現したいこと

以下のようなテストをした時に、エラーが発生します。
1.違うユーザーがログインしようとした時、リダイレクトを返す。
2.ログインしていない状態で、編集しようとした時に、リダイレクトを返す。
これらのエラーを解消したいです。

発生している問題・エラーメッセージ

ERROR["test_should_redirect_edit_when_logged_in_as_wrong_user", #<Minitest::Reporters::Suite:0x00005592a4fb54c8 @name="UsersControllerTest">, 1.1818991569998616] test_should_redirect_edit_when_logged_in_as_wrong_user#UsersControllerTest (1.18s) NoMethodError: NoMethodError: undefined method `email' for nil:NilClass test/test_helper.rb:24:in `log_in_as' test/controllers/users_controller_test.rb:27:in `block in <class:UsersControllerTest>' ERROR["test_should_redirect_update_when_logged_in_as_wrong_user", #<Minitest::Reporters::Suite:0x00005592a502b920 @name="UsersControllerTest">, 1.1931694939999034] test_should_redirect_update_when_logged_in_as_wrong_user#UsersControllerTest (1.19s) NoMethodError: NoMethodError: undefined method `email' for nil:NilClass test/test_helper.rb:24:in `log_in_as' test/controllers/users_controller_test.rb:34:in `block in <class:UsersControllerTest>' ERROR["test_should_redirect_update_when_not_logged_in", #<Minitest::Reporters::Suite:0x00007fc120c57a18 @name="UsersControllerTest">, 1.235307616] test_should_redirect_update_when_not_logged_in#UsersControllerTest (1.24s) ActionController::UrlGenerationError: ActionController::UrlGenerationError: No route matches {:action=>"show", :controller=>"users", :id=>nil}, missing required keys: [:id] test/controllers/users_controller_test.rb:20:in `block in <class:UsersControllerTest>' 28/28: [====================] 100% Time: 00:00:01, Time: 00:00:01 Finished in 1.43715s 28 tests, 62 assertions, 0 failures, 3 errors, 0 skips

該当のソースコード

以下のurlのgithubの中にあります。
https://github.com/yuyakesan/rails_third
一応、該当のテストのファイルを掲載します。

Ruby

1require 'test_helper' 2 3def setup 4 @user = users(:michael) 5 @other_user = users(:archer) 6end 7 8class UsersControllerTest < ActionDispatch::IntegrationTest 9 test "should get new" do 10 get signup_path 11 assert_response :success 12 end 13 14 test "should redirect index when not logged in" do 15 get users_path 16 assert_redirected_to login_url 17 end 18 19 test "should redirect update when not logged in" do 20 patch user_path(@user), params: { user: { name: @user.name, 21 email: @user.email } } 22 assert_not flash.empty? 23 assert_redirected_to login_url 24 end 25 26 test "should redirect edit when logged in as wrong user" do 27 log_in_as(@other_user) 28 get edit_user_path(@user) 29 assert flash.empty? 30 assert_redirected_to root_url 31 end 32 33 test "should redirect update when logged in as wrong user" do 34 log_in_as(@other_user) 35 patch user_path(@user), params: { user: { name: @user.name, 36 email: @user.email } } 37 assert flash.empty? 38 assert_redirected_to root_url 39 end 40end

試したこと

app/controllers/users_controller.rbは、チュートリアル通りに、書き直したので、おそらく間違えていないと思います。

補足情報(FW/ツールのバージョンなど)

railsのバージョンは6.0.3です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

neko_daisuki

2021/04/04 07:16

def setup が class UsersControllerTest の外にありますが、中に移動するとどうなりますか? class UsersControllerTest < ActionDispatch::IntegrationTest def setup
ym1111

2021/04/19 06:44

できました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問