railsチュートリアルのパスワードリセットの章でテストが上手くいかないです。
エラー内容は<"password_resets/edit">に飛ばされるはずだけど、<[]> に飛んでるよ。
っという解釈で合ってますか?
商材内ではeditコントローラー内は何も書かなくても、railsのデフォルトを設定を利用して<"password_resets/edit">に飛ばすと説明していたように思うのですが上手くいきません。
本コードが下記になります。
class PasswordResetsController < ApplicationController
before_action :get_user, only: [:edit, :update]
before_action :valid_user, only: [:edit, :update]
before_action :check_expiration, only: [:edit, :update]
def new
end
def create
@user = User.find_by(email: params[:password_reset][:email].downcase)
if @user
@user.create_reset_digest
@user.send_password_reset_email
flash[:info] = "Email sent with password reset instructions"
redirect_to root_url
else
flash.now[:danger] = "Email address not found"
render 'new'
end
end
def edit
end
def update
if params[:user][:password].empty?
@user.errors.add(:password, :blank)
render 'edit'
elsif @user.update_attributes(user_params)
log_in @user
flash[:success] = "Password has been reset."
redirect_to @user
else
render 'edit'
end
end
private
def user_params
params.require(:user).permit(:password, :password_confirmation)
end
def get_user
@user = User.find_by(email: params[:email])
end
def valid_user
if not (@user && @user.activated? && @user.authenticated?(:reset, params[:id]))
redirect_to root_url
end
end
def check_expiration
if @user.password_reset_expired?
flash[:danger] = "Password reset has expired."
redirect_to new_password_reset_url
end
end
end
=====下記はテストコード=================================
require 'test_helper'
class PasswordResetsTest < ActionDispatch::IntegrationTest
def setup
ActionMailer::Base.deliveries.clear
@user = users(:michael)
end
test "password resets" do
get new_password_reset_path
assert_template 'password_resets/new'
post password_resets_path, params: { password_reset: { email: "" } }
assert_not flash.empty?
assert_template 'password_resets/new'
post password_resets_path,
params: { password_reset: { email: @user.email } }
assert_not_equal @user.reset_digest, @user.reload.reset_digest
assert_equal 1, ActionMailer::Base.deliveries.size
assert_not flash.empty?
assert_redirected_to root_url
user = assigns(:user)
get edit_password_reset_path(user.reset_token, email: "")
assert_redirected_to root_url
user.toggle!(:activated)
get edit_password_reset_path(user.reset_token, email: user.email)
assert_redirected_to root_url
user.toggle!(:activated)
get edit_password_reset_path('wrong token', email: user.email)
assert_redirected_to root_url
get edit_password_reset_path(user.reset_token, email: user.email)
assert_template 'password_resets/edit'
assert_select "input[name=email][type=hidden][value=?]", user.email
patch password_reset_path(user.reset_token),
params: { email: user.email,
user: { password: "foobaz",
password_confirmation: "barquux" } }
assert_select 'div#error_explanation'
patch password_reset_path(user.reset_token),
params: { email: user.email,
user: { password: "",
password_confirmation: "" } }
assert_select 'div#error_explanation'
patch password_reset_path(user.reset_token),
params: { email: user.email,
user: { password: "foobaz",
password_confirmation: "foobaz" } }
assert is_logged_in?
assert_not flash.empty?
assert_redirected_to user
end
end
===============エラー内容=====================
FAIL["test_password_resets", PasswordResetsTest, 1.287856664000003]
test_password_resets#PasswordResetsTest (1.29s)
expecting <"password_resets/edit"> but rendering with <[]>
test/integration/password_resets_test.rb:39:in `block in class:PasswordResetsTest'
=========================================
どなたか宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/05/20 15:54
2019/05/20 16:28
退会済みユーザー
2019/05/20 19:07
2019/05/21 05:26
退会済みユーザー
2019/05/22 15:59
2019/05/23 06:05 編集
退会済みユーザー
2019/05/25 00:35