2017-02-19 1 views
0

저는 레일 테스트를 처음 사용하기 때문에 테스트를 처음했습니다 ...하지만 이번에는 올바른 방법으로 테스트하려고합니다.왜이 간단한 minitest가 실패합니까?

왜이 기본 테스트가 실패합니까?

test "once you go to to app you are asked to sign in" do 
    get "/" 
    assert_redirected_to "https://stackoverflow.com/users/sign_in" 
    assert_select "title", "Home Sign-In" 
end 

첫 번째 어설 션은 성공했지만 두 번째는 성공하지 못합니다. 소스를 볼 때 제목이 올바른 것처럼 보입니다.

<title>Home Sign-In</title> 

답변

2

컨트롤러 메서드에서 호출을 리디렉션하는 경우 실제로 렌더링되지 않습니다. 그래서 assert_select을 사용할 수 없습니다.

당신은 두 가지로 테스트 케이스를 분할하려고 할 수 있습니다 :

test "once you go to to app you are asked to sign in" do 
    get "/" 
    assert_redirected_to "https://stackoverflow.com/users/sign_in" 
end 

test "sign in page title is correct" do 
    get "https://stackoverflow.com/users/sign_in" 
    assert_select "title", "Home Sign-In" 
end 
0

@Pavel는 권리입니다. 요청을받은 후 응답을 확인하는 간단한 방법은 @ response.body입니다. 파벨을 제안했다으로 따라서 귀하의 경우

test "once you go to to app you are asked to sign in" do 
    get "/" 
    assert_redirected_to "https://stackoverflow.com/users/sign_in" 
    byebug #print @response.body here. At this point @response.body will 
    # be "You are being redirected to /users/sign_in". 
    assert_select "title", "Home Sign-In" 
end 

그래서 당신은 그것을 수정할 수 있습니다

test "sign in page title is correct" do 
    get "https://stackoverflow.com/users/sign_in" 
    assert_select "title", "Home Sign-In" 
end