에서 실패합니다.공장 소녀의 순서는 내가이 공장이 autospec
autospec을 실행하면 전자 메일 주소가 두 개의 서로 다른 개체에서 두 번 사용되고 있음을 알리는 즉시 실패합니다 (이를 제한하는 유효성 검사가 있음).
왜 autospec에서 다르게 동작합니까?
에서 실패합니다.공장 소녀의 순서는 내가이 공장이 autospec
autospec을 실행하면 전자 메일 주소가 두 개의 서로 다른 개체에서 두 번 사용되고 있음을 알리는 즉시 실패합니다 (이를 제한하는 유효성 검사가 있음).
왜 autospec에서 다르게 동작합니까?
나는 무슨 일이 일어나고 있는지 의심 FactoryGirl가 autospec
에서 각 호출에 n
있음을 재설정되지만 데이터베이스가 비우지 않은 것입니다.
첫째, 진단을 확인하기 위해, 다음에 공장을 변경 : 내 진단이 정확
Factory.define :email_address do |e|
e.sequence(:address) { |n| puts "Email ##{n}"; "factory_#{n}@example.com" }
e.validated true
end
경우,이 두 개의 가능한 수정 :
Factory::Sequence
에 대한 심각한 해킹과 관련이 있습니다. Factory::Sequence.sequences
을 Hash[Symbol => Proc]
에서 가장 높은 색인을 기억하는 Hash[Symbol => [Proc, Integer]
으로 설정해야 할 수 있습니다. 사실, autospec 은이 FactoryGirl 클래스를 제대로 언로드 한 것으로 보이기 때문에 작동하지 않을 수도 있습니다. 그렇지 않으면 시퀀스 조회가 실패하지 않고 새로운 Factory::Sequence
객체를 생성합니다.가끔 Ctrl + C로 테스트 스위트를 중단하면 데이터베이스가 더러워 질 수 있습니다. 데이터베이스가 더럽기 때문에 새로운 객체를 만드는 것은 검증 충돌을 일으킬 것입니다. rake db:test:clone
을 다시 실행하면 문제가 없습니다.
이후 작업을 다시 시작했습니다. 필자가 질문을 쓴 이후로 나는 많은 보석을 업그레이드했고 코드베이스는 많이 바뀌었다. 나는 정말로 그 문제가 무엇인지 짐작조차 할 수 없었다. 입력 해 주셔서 감사합니다. 앞으로도 비슷한 문제가 발생하면 문제 해결의 출발점을 갖게 될 것입니다. 평화 존 –