내가이 시험에 로그인 절차/signout 방법을 테스트 할 sign_out 방법에 대한 기능 테스트에서 CURRENT_USER를 파괴 할 수 없습니다가
테스트/컨트롤러/sessions_controller_test.rb을 에서
class SessionsControllerTest < ActionController::TestCase
fixtures :users
include SessionsHelper
test "should signin and signout" do
get :new
assert_response :success
post :create, email: users(:alex).email, password: 'qwerty'
assert_redirected_to profile_url
assert cookies[:remember_token]
assert current_user == users(:alex), 'Ooops! Wrong current_user!'
delete :destroy
assert_redirected_to signin_url
debugger
assert !cookies[:remember_token]
=> assert !current_user, 'Ooops! Current_user not nil!'
end
end
=> 점 cookies[:remember_token]
은 없어졌지만 current_user
여전히 users(:alex)
입니다. 이유는 알 수 없습니다. 내가 delete :destroy
라인에서 스턴을 놓쳤는가?
로그 아웃 기능이있는 브라우저에서 통합 테스트가 통과하고 라이브 성능이 향상됩니다. 세션 컨트롤러와 도우미에서
방법 :
sessions_controller.rb
def destroy
sign_out
redirect_to signin_url
end
sessions_helper.rb
def current_user=(user)
@current_user = user
end
def current_user
remember_token = User.encrypt(cookies[:remember_token])
@current_user ||= User.find_by(remember_token: remember_token)
end
def sign_out
cookies.delete(:remember_token)
self.current_user = nil
end
'User.find_by (remember_token : Remember_token : User.encrypt (nil))'은 무엇을 반환합니까? –
'User.find_by (remember_token : User.encrypt (nil)) => nil' –