2009-07-29 3 views
5

전 포스트에서 커밋 후크를 통해 내 장고 응용 프로그램에 통합을 제공하려고합니다.django 테스트 케이스에 의해 삽입 된 레코드를 볼 수 없습니다

(a) 테이블에 몇 개의 레코드를 삽입하고 (b) svn 커밋을 생성하며 (c) svn 커밋이 my를 사용하는 후크를 실행하는 django 테스트 케이스 (unittest.TestCase의 하위 클래스) 장고 모델 정보를 찾아보십시오.

저는 sqlite3 db를 사용하고 있습니다. 테스트는 이 아니며을 사용합니다 : memory : db, 실제 파일을 사용하고 있습니다. 내가 그것을 검사 할 수 있도록 완료되면 테스트 DB를 삭제하지 않도록 (이 문제를 디버깅하기위한) 장고 테스트 코드를 수정했습니다.

테스트 코드는 model.MyModel.objects.all()을 덤프하고 레코드는 (a)와 (b) 사이에 있습니다.

(c)에서 후크가 발생하면 모델도 덤프되고 레코드가 없습니다. 테스트를 실행 한 후 db를 수동으로 검사 할 때 레코드가 없습니다.

db 파일에 레코드를 커밋하지 않는 django 테스트 프레임 워크에 문제가 있습니까?

을 명확하게하려면 (d) 테스트 케이스를 끝내십시오. 따라서 svn 커밋 훅은 테스트 케이스가 종료되기 전에 실행되고 임의의 장고 db 정리 코드 이 실행되기 전에이 실행되어야합니다.

추가 정보 : (b)와 (b) 사이에 15 초 지연을 추가하여 테스트 중간에 수동으로 db 파일을 검사 할 수 있습니다. 레코드가 파일에 없습니다.

답변

5

장고 트렁크를 사용하고 있습니까? 최근 변경 사항 (Changeset 9756)은 트랜잭션에서 테스트를 실행 한 다음 롤백합니다. 여기에 체크인 코멘트는 다음과 같습니다

8138 #

고정 - (데이터베이스가 지원하는 경우) django.test.TestCase이 테스트 롤백로 변경 대신 플러싱과 데이터베이스를 다시로드. 이것은 실질적으로 시험 스위트를 실행하는 데 걸리는 시간을 줄이면됩니다. 시험 스위트.

+0

Vinay, 감사합니다. 내 나무에 그 코드가 있습니다. 트랜잭션 지원을 False로 설정 했으므로 이제 테스트가 끝납니다. – bstpierre

+0

@bstpierre, 어떻게 트랜잭션 지원을 False로 설정 했습니까? – Greg

+0

변경 집합의 모습에서 @Greg 아마도 TestCase 대신에'TransactionTestCase'를 사용했을 것입니다. 그러나이 중 일부는 지난 7 년 동안 변경되었을 가능성이 있습니다. ymmv – bstpierre

0

테스트 프레임 워크는 데이터를 데이터베이스에 저장하지 않으므로 테스트가 완료되면 데이터가 정리됩니다.

관련 문제