2014-01-12 3 views
3

수업 내에서 다음과 같은 속성에 문제가 있습니다. 나는 다음과 같은 두 가지 속성에 대한수사하는 사람에 대한 제목을 변경하는 방법

validates :name, uniqueness: { scope: :parent_id } 

지금까지를 결합 고유성을 적용 할 필요가뿐만 아니라

validates :date, presence: true

: 나도 데이터베이스 수준에서 적용됩니다 진정한 존재와 날짜 속성이 ... 모든 것이 괜찮습니다,하지만 난 사양 테스트를 할 고유성

it { should validate_uniqueness_of(:name).scoped_to(:parent_id) }

하지만 위 라인의 문제는 db에 레코드를 삽입하려고 시도 할 것이고 임의의 이름을 사용하고 parent_id 값을 사용하면 날짜를 0으로 만들 수 있습니다. 따라서 데이터베이스에서 실패합니다.

나는 시험에서 이미 subject { build(:my_model) }을 시도했지만 그 라인은 여전히 ​​자신의 것이고 날짜 속성을 설정하지 않고있다.

내가 만든 제목을 사용하여 어떻게 shoulda를 만들 수 있습니까? 나는 무엇인가 놓치고 있습니까?

답변

4

데이터베이스가 고유하지 않은 경우를 테스트하기 위해 데이터베이스에 별도의 레코드를 만들어야합니다. 이 작업을 수행하기 위해 레일스 유효성 검사를 건너 뛰지 만 데이터베이스 유효성 검사를 건너 뛸 수는 없습니다. 수동으로 만들면 대신 사용하게됩니다. 테스트를 다음으로 변경하십시오.

subject { FactoryGirl.build(:my_model) } 
it { should validate_uniqueness_of(:name).scoped_to(:parent_id) } 

자세한 내용은 shoulda matchers 문서에서 다루고 있습니다. http://www.rubydoc.info/github/thoughtbot/shoulda-matchers/Shoulda/Matchers/ActiveRecord#validate_uniqueness_of-instance_method

+0

감사합니다, 그것은 효과가 있었지만 아직 설명을 완전히 이해하려고 노력했지만. 그러나 다시 감사합니다 – Pablo

+0

특히 당신을 명확히 할 수있는 것이 있습니까? (나는 thinkbot 직원이고 shoulda-matchers에서 작업하므로 아무 것도 묻지 않는다) – sgrif

+0

@sgrif,이 'create'방법은 어디서 오는가? 이것이 RSpec 및 FactoryGirl과 함께 어떻게 사용될 수 있습니까? FactoryGirl.create를 사용하여 시도했지만 shoulda 여전히 별도의 레코드를 만듭니다. 감사. –

관련 문제