2011-08-23 5 views
2

두 모델을 가지고 A와 B를 부를 수 있습니다. 새 A 레코드를 작성하면 B 레코드가 작성되는 경우가 있습니다. 내 테스트 파일에내 레일 앱에서 중반 테스트가 사라지는 이유는 무엇입니까?

 
class A < ActiveRecord::Base 
    after_create { |a| B.create_for(a) if a.needs_b? } 
end 

나는

class TapeTest < ActiveSupport::TestCase 
    self.use_transactional_fixtures = false 

    test "something" do 
    assert_equal(0, B.count) 
    a = A.create(:foo => "bar") 
    assert_equal(1, B.count) 
    end 
end 

이 시험은 내가 콘솔을 통해 복사 할 경우이 작품에도 불구하고, 두 번째 주장에 실패합니다. B.create_for 메서드에서 debugger 호출을 추가하면 실제로 B 레코드가 생성됩니다. 그것은 db와 모든 것에 나타나지만 실행이 test "something" 블록으로 돌아 가면 사라집니다! 이 문제를 해결하기 위해 transactional_fixtures를 해제했지만 도움이되지 않습니다.

편집 : 트랜잭션 처리 도구를 켜기로 설정하면이 문제가 실제로 해결되지만 더 많은 테스트가 중단됩니다. 그것이 꺼져 야한다고 가정하십시오.

답변

0

확실히 무슨 일인지 모르겠지만 A.create (...)를 시도하여 롤백을 일으키는 예외가 발생했는지 확인하려고합니다.

+0

좋습니다. 나는 그것을 조사했고 A.create했다! 예외는 반환하지 않습니다. – muirbot

관련 문제