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

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

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

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

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

1回答

691閲覧

expecting <"password_resets/edit"> but rendering with <[]> について

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby on Rails 5

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

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2019/05/17 12:55

編集2019/05/17 12:59

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'

=========================================
どなたか宜しくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

ruby

1get edit_password_reset_path(user.reset_token, email: user.email) 2assert_template 'password_resets/edit'

の部分で、エラーが出ていると思います。
/password_resetsディレクトリのedit.html.erbをレンダリングできていないということだと思います。
該当ファイルはありますか?

投稿2019/05/20 05:08

urbainleverrier

総合スコア200

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

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

退会済みユーザー

退会済みユーザー

2019/05/20 15:54

回答ありがとうございます。 下記が該当のコードになります。 宜しくお願い致します。 <% provide(:title, 'Reset password') %> <h1>Reset password</h1> <div class="row"> <div class="col-md-6 col-md-offset-3"> <%= form_for(@user, url: password_reset_path(params[:id])) do |f| %> <%= render 'shared/error_messages', object: f.object %> <%= hidden_field_tag :email, @user.email %> <%= f.label :password %> <%= f.password_field :password, class: 'form-control' %> <%= f.label :password_confirmation, "Confirmation" %> <%= f.password_field :password_confirmation, class: 'form-control' %> <%= f.submit "Update password", class: "btn btn-primary" %> <% end %> </div> </div>
urbainleverrier

2019/05/20 16:28

PasswordResetsControllerでeditを次のようにするとどうですか? ``` def edit render 'edit' end ```
退会済みユーザー

退会済みユーザー

2019/05/20 19:07

試しましたがエラー文が変わらないです、、 render 'password_resets/edit' だと通りました、、
urbainleverrier

2019/05/21 05:26

ちなみに、 `test/integration/password_resets_test.rb:39`の39行目は、私が回答にあげたコードで合っていますか? controllerとviewはrails generateして作られましたか? すいません、あとは現状からだとわからないですね。
退会済みユーザー

退会済みユーザー

2019/05/22 15:59

返信が遅れて申し訳ありません。 tktkt様があげたコードとはどのことでしょうか? 読み取れず申し訳ありません。 controllerとviewはrails gで作成しました!
urbainleverrier

2019/05/23 06:05 編集

すみません、 ``` get edit_password_reset_path(user.reset_token, email: user.email) assert_template 'password_resets/edit' ``` です。
退会済みユーザー

退会済みユーザー

2019/05/25 00:35

遅れて申し訳ありません。 エラー個所は仰って頂いていた個所で間違い無いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問