2011-09-17 1 views
3

내 포스트 모델에 조건부 검증이 있습니다조건부 유효성 검사가 실패하는 이유는 무엇입니까?

validates :title, :presence => true, :if => Proc.new { |post| post.post_type == "text" } 

그리고 내 post_spec.rb 파일에 다음과 같은 사양을 가지고 :

it "should only require a title if the post type is text" do 
    post = Post.new(@attr.merge(:title => "", :post_type => "text")) 
    post.should_not be_valid 

    post = Post.new(@attr.merge(:title => "", :post_type => "image")) 
    post.should be_valid # This fails 
end 

내 질문은 : 왜 두 번째 테스트가 실패 하는가?

+0

우리는 실패 할 수있는 다른 검증이없는 가정해야하고,'@의 attr'의 나머지 값은 유효 ...

post = Post.new(:title => "", :post_type => "image") post.valid? post.errors 

을 당신이 무엇을 얻을 참조 : 레일 콘솔에 가서 무엇입니까? –

+0

예, 두 번째 게시물 작성에서 빈 제목을 제거하면 유효성 검사가 통과됩니다. 따라서 제목 유효성 검사가 실패하고 나머지는 유효합니다. –

+1

규칙을'post.errors.should be_empty'와 같이 변경했다면, 적어도 더 자세한 설명이 실패 할 것입니다. (또는 심지어 post.errors [: title]', 그게 당신이 테스트하고있는 것이기 때문에) ' – numbers1311407

답변

0

어딘가에 다른 유효성 검사가 필요합니다.