2010-06-09 3 views

답변

1

나는 무슨 일이 일어나고 있는지 의심 FactoryGirl가 autospec에서 각 호출에 n 있음을 재설정되지만 데이터베이스가 비우지 않은 것입니다.

첫째, 진단을 확인하기 위해, 다음에 공장을 변경 : 내 진단이 정확

Factory.define :email_address do |e| 
    e.sequence(:address) { |n| puts "Email ##{n}"; "factory_#{n}@example.com" } 
    e.validated true 
end 

경우,이 두 개의 가능한 수정 :

  1. 변화 FactoryGirl 인덱스에서 시작 사용 된 최대 ID보다 큽니다. 이는 Factory::Sequence에 대한 심각한 해킹과 관련이 있습니다. Factory::Sequence.sequencesHash[Symbol => Proc]에서 가장 높은 색인을 기억하는 Hash[Symbol => [Proc, Integer]으로 설정해야 할 수 있습니다. 사실, autospec 이 FactoryGirl 클래스를 제대로 언로드 한 것으로 보이기 때문에 작동하지 않을 수도 있습니다. 그렇지 않으면 시퀀스 조회가 실패하지 않고 새로운 Factory::Sequence 객체를 생성합니다.
  2. 각 자동 실행 사이에 데이터베이스가 지워지지 않는 이유를 찾아냅니다. 티어 다운 방법을 확인 했습니까? 테스트 데이터베이스가 트랜잭션을 지원합니까?
+0

이후 작업을 다시 시작했습니다. 필자가 질문을 쓴 이후로 나는 많은 보석을 업그레이드했고 코드베이스는 많이 바뀌었다. 나는 정말로 그 문제가 무엇인지 짐작조차 할 수 없었다. 입력 해 주셔서 감사합니다. 앞으로도 비슷한 문제가 발생하면 문제 해결의 출발점을 갖게 될 것입니다. 평화 존 –

3

가끔 Ctrl + C로 테스트 스위트를 중단하면 데이터베이스가 더러워 질 수 있습니다. 데이터베이스가 더럽기 때문에 새로운 객체를 만드는 것은 검증 충돌을 일으킬 것입니다. rake db:test:clone을 다시 실행하면 문제가 없습니다.