2015-01-14 5 views
1

의 테스트 하였다 "목록 8.20 : 유효한 정보의 사용자 로깅을위한 테스트"레일 튜토리얼 - 오류 메시지 : 예상 응답은 <redirect> 수 있지만 <200>

FAIL["test_login_with_valid_information", UsersLoginTest, 1.051300315] 
test_login_with_valid_information#UsersLoginTest (1.05s) 
Expected response to be a <redirect>, but was <200> 
test/integration/users_login_test.rb:22:in `block in <class:UsersLoginTest>' 
나에게 영구적 인 오류 메시지를주고있다

테스트는 다음과 같습니다

19 test "login with valid information" do 
20 get login_path 
21 post login_path, session: { email: @user.email, password: 'password' } 
22 assert_redirected_to @user 
23 follow_redirect! 
24 assert_template 'users/show' 
25 .... 

세션 컨트롤러는 I이 오류 메시지가

def create 
    user = User.find_by(email: params[:session][:email].downcase) 
    if user && user.authenticate(params[:session][:password]) 
    log_in user 
    redirect_to user # What I want to happen 
    else 
    flash.now[:danger] = 'Invalid email/password combination' 
    render 'new'  # What is happening 
    end 
end 
0123을 일으키는 상상하고있는 무슨이다

사용자가 인증되면, 그것은 다른 로그인 양식

렌더링 할 사용자 프로필 페이지 에 리디렉션해야합니다 그래서 내가 믿는 문제는 내 테스트 사용자가 인증되지 않는 것입니다. 사이트에 수동으로 로그인 할 때 응용 프로그램 로그인 및 리디렉션 기능이 제대로 작동합니다.

시험/비품/users.yml이 암호 '암호'

password_digest: <%= User.digest('password') %> 

이 암호 '암호'

def User.digest(string) 
    cost = ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST : 
               BCrypt::Engine.cost 
    BCrypt::Password.create(string, cost: cost) 
end 

소화하는 사용자 모델을 통과해야 문제가 거짓말인가요? 그리고이 테스트가 실패한 이유를 보여주는 또 다른 테스트를 어떻게 만들 수 있습니까?

답변

0

좋은 밤 잠이 들었을 때 나는 데이터베이스 오류로 인한 것 같았습니다. 낮음 및 내 데이터베이스 대문자로 된 전자 메일 및 내 컨트롤러 downcased 전자 메일을 제출하십시오.

해결되었습니다.

1

나는이 권한을 읽고 있는데 다음 브라우저를 명확하게하기 위해 나는 다음과 같은 내용을 추가 할 것이므로 비슷한 (동일한) 문제가있다. Shonin이 지적한 것처럼 Shonin은 컨트롤러가 다운 이메일을받는 것과 관련이 있다고 지적했다.

michael: 
    name: Michael Example 
    email: [email protected] 
    password_digest: <%= User.digest('password') %> 

통과 반면 users.yml 코드

michael: 
    name: Michael Example 
    email: [email protected] 
    password_digest: <%= User.digest('password') %> 

의 주소 등 외관상으로는 통과하지 않습니다.