2011-08-13 2 views
0

.. 대부분의 경우테스트 스위트 문제 나는 최근에 내가 3.1rc5를 레일에 작업 된 응용 프로그램을 업그레이드 3.1rc5

레일에 큰있었습니다하지만 내 테스트의 몇 정말 이상한 문제가있는 ..

..

내 오이 사양 중 하나의 예를 들어 내가 .. 공장 소녀를 사용하여 가짜 기록의 무리를 만들 보통이 잘 작동하지만, 어떤 이유로 레코드를 작성하지 않은 듯

은 그래서 댓글 내 공장 물건 전부를 꺼내 다음과 같이 바꿨습니다.

c = Contact.new(:first_name => "SOMEONE", :last_name => "COOL", :dob => 10.years.ago, :sex => "male") 
if c.save 
    puts "MYCOUNT: #{Contact.count}" 
else 
    puts "EXPLOSIONS!!!" 
end 

오이 스위트 출력의 일부로서이 실행이 :

MYCOUNT: 0 

따라서 연락처 레코드는 분명히 저장 (및 검증을 통과) 아직 내가 수를 호출 할 때 여전히 나타나지 않습니다되고있다 ??

왜 ??

내가 사용하고 :

레일 3.1rc5

RSpec에 레일

오이 레일

factory_girl_rails

나는 또한 아마 내가 '주의해야 태양 흑점을 사용하여 내 모델 색인 생성 (solr 당신이 당신의 시험에서 발사 트랜잭션 롤백있어 같은 API)는 https://github.com/outoftime/sunspot

+0

저장 후'c.reload'를 실행할 수 있습니까? 'Contact.all'에 나타나나요? 긴 대기 죄송 –

+0

은 ... 나는 또한 c.new_record을 확인 .. 아직 아무것도 c.reload을 실행하지 후에는 또한 Contact.all에 표시 나던 .. 괴괴 망측 한 일이 :-) 휴가 되었습니까? 그건 거짓말이야 .. 이것은 이상한 일입니다! –

답변

1

소리가 난다 :

1) 트랜잭션이

을 열었다을

2) Contact.save이 (지금) 합법적 연락 인스턴스와 DB의 기록을 가지고 성공

3) 뭔가 잘못되면, 액티브 :: 롤백

4) 거래를 제기 합법적 연락 인스턴스하지만 DB의 기록을 남겨, 롤백, 계산 = 0

레일스 업그레이드와 관련이있는 원인이 무엇인지 모르겠지만 실패한 항목을 찾는 데 도움이 될 것입니다.

편집 :

당신이 꼬리 당신은 롤백을 볼 로그/test.log 파일이 이러한 경우가 발생합니다. 이전의 DB 작업을 살펴보면 마지막으로 성공한 db 작업이 무엇인지에 대한 단서를 얻을 수 있습니다.

아니 정확한 과학이 있지만,이 경우인지를 결정하고 옆 어디로 갔는지의 거친 아이디어를 얻을 도움이 될 수 있습니다.

+0

고마워요! ActiveRecord :: Rollback이 발생했을 때 알아낼 수있는 방법이 있습니까? –

+0

편집하여 디버깅에 대한 자세한 정보를 추가하십시오. 행운을 빕니다! 나는 일주일 전이 같은 버그를 쳤고 처음에는 완전히 혼란스러워했습니다. – Winfield

+1

옙. 돈에 관해서는 꼬리표를 달고 롤백 해. 이제는 어디에서 왔는지 알아내는 까다로운 부분이 있습니다! : P 그것의 모양으로 볼 때 롤백하기 전에 마지막으로'SELECT COUNT (*) FROM'contacts' WHERE'contacts'.approved' = 1' (approved = 1이 기본 범위입니다) is :'RELEASE SAVEPOINT active_record_1' ... 롤백하기 전에 INSERT 이외의 유일한 것은'[paperclip] Saving attachments입니다 .' 나는 범인이 될 수 있다고 생각했기 때문에 .. 내 클립 클립 물건과 여전히 주사위를 주석 처리했습니다. ! 아! –