Railsチュートリアル第8章において、「ログイン時の統合テスト」を学んでいる際に、
エラーが発生してしまいました。
rails t
入力後にエラーが発生しております。
Running via Spring preloader in process 5144 Run options: --seed 29890 # Running: .F Failure: UsersLoginTest#test_login_with_valid_information [/home/ubuntu/environment/sample_app/test/integration/users_login_test.rb:23]: Expected response to be a <3XX: redirect>, but was a <200: OK> rails test test/integration/users_login_test.rb:19 .................. Finished in 1.400354s, 14.2821 runs/s, 26.4219 assertions/s. 20 runs, 37 assertions, 1 failures, 0 errors, 0 skips
下記に、users_login_test.rb
を記載します。
require 'test_helper' class UsersLoginTest < ActionDispatch::IntegrationTest def setup @user = users(:michael) end test "login with invalid information" do get login_path assert_template 'sessions/new' post login_path, params: { session: { email: "", password: "" } } assert_template 'sessions/new' assert_not flash.empty? get root_path assert flash.empty? end #正しいデータでemailとpasswordを渡したとき test "login with valid information" do get login_path post login_path, params: { session: { email: @user.email, password: 'password' } } assert_redirected_to @user follow_redirect! assert_template 'users/show' assert_select "a[href=?]", login_path, count: 0 assert_select "a[href=?]", logout_path assert_select "a[href=?]", user_path(@user) end end
自分でも検索したのですが、情報が少なく、
どなたか解決方法を教えていただければ幸いです。
追記
sessions_controller.rb
class SessionsController < ApplicationController #GET /login def new # X @session = Session.new # O scope: :session + url: login_path 中身は特に書かない end # POST /login def create @user = User.find_by(email: params[:session][:email].downcase) if !@user.nil? && @user.authenticate(params[:session][:email]) # && 両方とも成功したときの処理 #成功 log_in user redirect_to user else #失敗 #[:danger] = 赤色のフラッシュになる flash.now[:danger] = 'Invalid email/password combination' render 'new' end end def destroy end end
Railsのバージョンは6.0.3で、
Rubyのバージョンは2.6.3です。
回答1件
あなたの回答
tips
プレビュー