2011-09-13 3 views
2

자습서를 통해 railstutorial.org에서 일해 왔으며, 저자 코드에서 6.2.1 유효성 확인 부분에 대해 다소 혼란 스러웠습니다.Railstutorial.org 현재 테스트 유효성 확인

사용자 모델에서 자습서는 validates :name, :presence => true을 추가합니다. 충분히 간단합니다.

저자가 rspec 테스트를 작성하기로 결정했을 때, 그는 내가 조금 이상하다고 생각한 것을합니다. 각 블록 문을 간단하게 쓰기 :

describe User do 

before(:each) do 
    @attr = { :name => "Example User", :email => "[email protected]" } 
end 
. 
. 
. 
it "should require a name" do 
    no_name_user = User.new(@attr.merge(:name => "")) 
    no_name_user.should_not be_valid 
end 

end 

왜 하나는 없애 수있을 때 @attr에 빈 문자열을 병합 문제를 통해 이동

it "should require a name" do 
    no_name_user = User.new(:name => "", :email => "[email protected]") 
    no_name_user.should_not be_valid 
end 

나는 저자가 @attr 변수를 사용하는 것을 알고 전자 메일 주소의 존재 여부를 확인하는 것입니다. 이는 블록 성명을 사용하는 이유 중 하나입니다. 두 번째 블록 인용 구조의 구조를 따르는 것이 더 바람직합니다. 아직도, 나는 여기에 실종 된 뭔가가 있다는 느낌이 들었다.

또 다른 설명은 이름과 이메일만으로도 단순한 경우와 달리 입력 할 키가 많은 경우 @attr 구조를 사용하는 것이 도움이된다는 것입니다.

누구든지 입력 사항이 있습니까?

답변

1

모든 테스트에서 사용할 수있는 표준 속성 맵이 하나 있습니다. 테스트 결과 이 아니게되면 제거됩니다.

개인적으로, 나는 그것이 당신이 발견 한 것처럼 일종의 난독 화하는 것처럼 가치가 있음을 확신하지 못했지만, 거기에 있습니다.

1

요점은 테스트의 테스트 케이스와 관련된 코드 만 있으면됩니다. 사용자가 이름없이 유효하지 않은지 테스트 할 때 유일한 관련 속성은 name 속성입니다. 이 테스트는 이메일 속성에 대해 아무 것도 알지 않아야합니다.

새 필드의 존재 여부에 대한 유효성 검사를 추가한다고 가정 해 보겠습니다. 사용자가 필드를 작성하지 않은 모든 테스트를 업데이트해야합니다. 상단에 attr 해시가 있으면 새 필드가 팝업되고 모든 테스트가 정상적으로 처리됩니다.

테스트 용 개체를 만드는 것은 많은 솔루션이 있으며 가장 좋은 방법에 대한 토론이 많다는 공통적 인 문제입니다. 당신이 공장을 들여다 볼 것을 제안합니다. Machinist와 FactoryGirl은 Rails와 잘 어울리는 두 가지 대안입니다.