Hartl의 튜토리얼을 살펴보고 답변을 찾았지만 아무 것도 발견하지 못했습니다. (기존의 답변이있을 수 있지만 챕터가 업데이트되어 새로운 버전에서 전환 되었기 때문에 존재하지 않으면 찾을 수 없습니다.)Michael Hartl의 튜토리얼 10.26 장에 나열된 테스트가 실패 함
오전 10.2.2에 있습니다. 10.26 레일 테스트 목록 10.26.
ERROR["test_should_redirect_edit_when_logged_in_as_wrong_user", UsersControllerTest, 1.5802158990409225]
test_should_redirect_edit_when_logged_in_as_wrong_user#UsersControllerTest (1.58s)
BCrypt::Errors::InvalidHash: BCrypt::Errors::InvalidHash: invalid hash
app/controllers/sessions_controller.rb:9:in `create'
test/test_helper.rb:32:in `log_in_as'
test/controllers/users_controller_test.rb:29:in `block in <class:UsersControllerTest>'
ERROR["test_should_redirect_update_when_logged_in_as_wrong_user", UsersControllerTest, 1.606778411893174]
test_should_redirect_update_when_logged_in_as_wrong_user#UsersControllerTest (1.61s)
BCrypt::Errors::InvalidHash: BCrypt::Errors::InvalidHash: invalid hash
app/controllers/sessions_controller.rb:9:in `create'
test/test_helper.rb:32:in `log_in_as'
test/controllers/users_controller_test.rb:36:in `block in <class:UsersControllerTest>'
35/35: [=====================================================] 100% Time: 00:00:01, Time: 00:00:01
Finished in 1.71823s
35 tests, 87 assertions, 0 failures, 2 errors, 0 skips
시험/비품/users.yml
michael:
name: Michael Example
email: [email protected]
password_digest: <%= User.digest('password') %>
archer:
name: Sterling Archer
email: [email protected]
password_digest: <%= User.digest('password') %
테스트/컨트롤러/users_controller_test.rb
require 'test_helper'
class UsersControllerTest < ActionDispatch::IntegrationTest
def setup
@user = users(:michael)
@other_user = users(:archer)
end
test "should get new" do
get signup_path
assert_response :success
end
test "should redirect edit when not logged in" do
get edit_user_path(@user)
assert_not flash.empty?
assert_redirected_to login_url
end
test "should redirect update when not logged in" do
patch user_path(@user), params: { user: { name: @user.name,
email: @user.email } }
assert_not flash.empty?
assert_redirected_to login_url
end
test "should redirect edit when logged in as wrong user" do
log_in_as(@other_user)
get edit_user_path(@user)
assert flash.empty?
assert_redirected_to root_url
end
test "should redirect update when logged in as wrong user" do
log_in_as(@other_user)
patch user_path(@user), params: { user: { name: @user.name,
email: @user.email } }
assert flash.empty?
assert_redirected_to root_url
end
end
응용 프로그램/컨트롤러 : 여기
내 테스트에 대한 오류입니다 /users_controller.rbclass UsersController < ApplicationController
before_action :logged_in_user, only: [:edit, :update]
before_action :correct_user, only: [:edit, :update]
def show
@user = User.find(params[:id])
end
def new
@user = User.new
end
def create
@user = User.new(user_params)
# @user = User.new(params[:user]) # Not the final implementation!
if @user.save
log_in @user
flash[:success] = "Welcome to the Sample App!"
redirect_to @user
# Handle a successful save.
else
render 'new'
end
end
def edit
# can take out because already in correct_user @user = User.find(params[:id])
end
def update
# can take out because already in correct_user @user = User.find(params[:id])
if @user.update_attributes(user_params)
# Handle a successful update.
flash[:success] = "Profile updated"
redirect_to @user
else
render 'edit'
end
end
private
def user_params
params.require(:user).permit(:name, :email, :password,
:password_confirmation)
end
# Before filters
# Confirms a logged-in user.
def logged_in_user
unless logged_in?
flash[:danger] = "Please log in."
redirect_to login_url
end
end
# Confirms the correct user.
def correct_user
@user = User.find(params[:id])
redirect_to(root_url) unless @user == current_user
end
end
모든 테스트를 통과해야한다고 책에 표시되면 2 개의 테스트에 실패했습니다. 오류 메시지에 언급 된 줄을 살펴 보았지만 무엇이 잘못되었는지 확신 할 수 없습니다. 도움 주셔서 감사합니다.
편집 : 라인에 더주의 깊게
class SessionsController < ApplicationController
def new
end
def create
@user = User.find_by(email: params[:session][:email].downcase)
if @user && @user.authenticate(params[:session][:password])
log_in @user
params[:session][:remember_me] == '1' ? remember(@user) : forget(@user)
redirect_to @user
else
flash.now[:danger] = 'Invalid email/password combination' # Not quite right!
render 'new'
end
end
def destroy
log_out if logged_in?
redirect_to root_url
end
end
아! 잘 발견했다. 며칠 동안이 일에 매달렸다. 고맙습니다. – Owen