2017-10-12 3 views
0

을 필요로 할 때 모범 사례를 테스트 :레일 하나 개의 액티브 모델의 내가 확인하기 위해 상대방의 존재를 필요로 하나의 두 가지 모델을 가지고 있다고 가정 해 봅시다 다른

class Mother < ActiveRecord::Base 
    has_many :kids 
end 

class Kid < ActiveRecord::Base 
    belongs_to :mother 
    validates_presence_of :mother 
end 

I 모델 아이에 대한 테스트를 쓰고는 내가 테스트하고자하는 첫 번째 일은 어머니가 존재하지 않고 (즉, 데이터베이스에 유지되는) 아이를 구원 할 수 없다는 것입니다. 그러나 그 일을하기 위해, 나는 먼저 엄마를 만드는 테스트를 받아야합니다.

이 상황을 처리하는 가장 좋은 방법은 무엇입니까? 해야할까요 :

  • 시험하기 전에 테스트 데이터베이스를 Mother 인스턴스로 시드 하시겠습니까?
  • Kid가 테스트되기 전에 Mother의 인스턴스를 만들기 위해 Mother의 단위 테스트를 사용 하시겠습니까? 어떤 경우에는 권장하지 않는 테스트 순서를 지정해야합니다. 맞습니까?
  • 다른 옵션은 무엇입니까?
+0

테스트 프레임 워크에서 제공하는 모든 작업을 수행하지 않아야합니다. 설비 또는 공장. 다른 테스트에 의존하는 테스트를 작성하지 않아야합니다. 실제로 테스트가 수행되는 동안 데이터베이스를 비울 필요가 있기 때문에 불가능합니다. – meagar

+0

@meagar 필자는 이것이 조명기 또는 공장 인 허용 된 대답이어야한다고 생각합니다. 다시 대답 할 수있어서 받아 들일 수 있을까요? –

답변

0

어머니없이 엄마와 아이를 초기화 : mother = Mother.new Puis kid = Kid.new

당신이 아이과 같이 유지하려고하면 먼저 오류가 발생 스펙을 작성할 수 있습니다

: expect { kid.save! }.to raise_error

그런 다음 어머니를 kid.mother = mothe으로 설정하십시오. 이번에는 오류없이 아이를 지키기를 기대합니다.