質問編集履歴

1 コード追記

satail

satail score 31

2017/03/10 12:52  投稿

統合テストでエラーが出ます。
パスワード再設定の統合テストの統合テストをしたところ以下のエラーコードが出ました。password_resets_controller、password_resets_controller 両方確認したのですが原因が見当たりません。 このエラーの直し方を教えてください。
パスワード再設定の統合テストの統合テストをしたところ以下のエラーコードが出ました。password_resets_controller、password_resets_test 両方確認したのですが原因が見当たりません。 このエラーの直し方を教えてください。
```
FAIL["test_should_get_edit", PasswordResetsControllerTest, 2.5576734580099583]
test_should_get_edit#PasswordResetsControllerTest (2.56s)
       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>'
```
```
password_resets_controller
```
class PasswordResetsController < ApplicationController
 before_action :get_user,        only: [:edit, :update]
 before_action :valid_user,      only: [:edit, :update]
 before_action :check_expiration, only: [:edit, :update]   # (1) への対応
 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?                 # (3) への対応
     @user.errors.add(:password, "can't be empty")
     render 'edit'
   elsif @user.update_attributes(user_params)         # (4) への対応
     log_in @user
     flash[:success] = "Password has been reset."
     redirect_to @user
   else
     render 'edit'                                    # (2) への対応
   end
 end
 private
   def user_params
     params.require(:user).permit(:password, :password_confirmation)
   end
   # beforeフィルタ
   def get_user
     @user = User.find_by(email: params[:email])
   end
   # 有効なユーザーかどうか確認する
   def valid_user
     unless (@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
```
password_resets_test
```
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
```
  • Ruby on Rails

    16039 questions

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

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る