2017-03-15 1 views
0

Michael Hartl의 레일 튜토리얼을 살펴 보겠습니다. 6.2.2에서 UserTest는 'name should be present'라는 테스트를 포함하고 있습니다. 시험은 코드를'assert_not user.valid?' vs. 'assert user.invalid?'

test 'email should be present' do 
    @user.email = " "  
    assert_not user.valid? 
end 

을 포함하고 테스트가 실패 할 때, 다음과 같은 출력입니다 : 내가

test 'email should be present' do 
    @user.email = " " 
    assert user.invalid? 
end 

에 어설 변경하는 경우 실패한 테스트 출력이

입니다

FAIL["test_name_should_be_present", UserTest, 0.10366088798036799] 
test_name_should_be_present#UserTest (0.10s) 
     Expected true to be nil or false 

FAIL["test_name_should_be_present", UserTest, 0.11991263600066304] 
test_name_should_be_present#UserTest (0.12s) 
     Expected false to be truthy. 

Are 하나의 테스트가 실패하고 다른 테스트가 실패하는 상황, 또는 이들이 상호 교환 가능한 상황이 있습니까? '주장하라. 무효?' 나에게 더 자연스러워 보입니다.

현재, 전자 메일의 존재를 확인하는 코드가 작성되기 전에 테스트가 작성되기 때문에 테스트가 실패합니다.

+0

테스트의 전체 코드를 보여주십시오. –

+0

'refute user.valid? '도 있지만, 이것에 대한 느낌이 섞여 있습니다. –

답변

0

예, 동일합니다.

.valid?? assert_not은 nil 또는 false를 요구하고 assert는 nil이 아닌 객체 또는 true를 기대합니다.

은 당신이 할 수는 @user가 유효하지 않은 가정 : 반면에

assert_not @user.valid? 
#valid will give you false, so 'assert_not false' is true, and the test passes. 

: 우리가 가설과 @user이 유효 변경하는 경우

assert @user.invalid? 
#invalid will give you true, so 'assert true' is true, and the test passes. 

당신은 같은 추론을 할 수 있습니다.

+0

이것은 제 가정이었습니다. 감사. – froglegs

+0

올바른지 확인하는 것을 잊지 마세요 :) – Gaston