2011-09-06 2 views
3

지금까지 ActiveRecord에서 상속받은 3 개의 클래스로 구성된 간단한 레일 앱을 만들었습니다. 테스트 할 클래스를 이미 작성 했으므로 테스트 중심 개발에 조금 앞선 것입니다. 지금까지 작성한 테스트는 모두 잘 진행되었습니다. 객체가 생성되고 속성이 응답하며 유효성 검사가 모두 완료됩니다.레일스 용 RSpec 및 ActiveRecord : 효과적인 테스트 작성 방법

문제는 "!" 내 생성 방법에, 지금부터 개체가 데이터베이스에 모든 방법을 통해 전달되고있다. 무효 입력을 가로 채기위한 정상적인 유효성 검사 대신 데이터베이스가 자극에 응답 할 수있는 기회를 얻고있는 것으로 보입니다.

지금까지 내 테스트를 실행할 때 내가받은 오류 :

액티브 :: RecordInvalid : 검증 실패 : 가게 (최대 11 자)

나는 기뻐요 너무 깁니다 이 오류가 발생하지만 내 테스트에서이 오류를 더 잘 계획하는 방법을 알고 싶습니다. 위의 오류를 생성하는 코드는 다음과 같습니다 당신이 모두 그 형태가되어야한다 무엇에 도움이 되거 수 희망 long_id_department.should_not be_valid

:

it "should not a accept a department with a shopify shop_id that's over 11 chars" do 
    long_id = "9" * 12 
    long_id_department = Department.create!(@attr.merge(:id => [long_id, ""])) 
    long_id_department.should_not be_valid 
    end 

나는 특히이 라인은 다른 형태를 가정해야한다고 가정.

답변

4

shoulda 보석은 유효성 검사에 케이크 조각을 테스트합니다. 최신 버전은 RSpec의 애드온 (add-on)으로 빌드됩니다.

검증이 시도하고 특정 유형의 문서는 당신은 다음과 같습니다 테스트 코드로 끝날 것이다 here.

입니다.

describe Department do 
    it { should ensure_length_of(:id).is_at_most(11) } 
end 
3

작성시 예외가 발생하면 catch해야합니다. 작성한대로 예외는 rspec에 의해 포착됩니다.

lambda do 
long_id_department = Department.create!(@attr.merge(:id => [long_id, ""])) 
end.should raise_error 

should_not be_valid 테스트는 생성시 의미가 없습니다! 객체가 유효하지 않으면 예외를 throw합니다.

+0

네가 맞지만 다른 해결책은 좀 더 우아 해. 당신은 추가 뚱뚱한 가진 해결책을 제공하기를위한 투표를 얻는다 그러나. – Bnjmn

관련 문제