2012-04-28 4 views
11

로컬 PostgreSQL 서버를 사용하는 Django 프로젝트가 있습니다. 디버거를 사용하여 내가 가지고있는 이상한 버그를 디버깅하고 있습니다. 디버거가 테스트 중 하나에서 중지되는 동안 테스트 데이터베이스를 보려고했습니다. 나는이 새로운 데이터베이스 (test_project1)를 보았고, 모든 스키마는 반드시 있어야하는 것처럼 정의되었다. 그러나 모든 테이블은 비어 있습니다.테스트가 실행되는 동안 Django 테스트 데이터베이스가 비어있는 것처럼 보입니다.

테이블이 비어 있지 않다는 것을 알고 있습니다 : - 저는 조명기를 사용했으며 일부 테스트는 이미 실행되어 데이터를 반환했습니다. - 게시 테스트가 생성되어 새 사용자가 201 상태 코드를 반환했습니다.

그러나 pgAdmin3 또는 psql을 사용하여 데이터베이스에 액세스하려고 시도 할 때 데이터가 표시되지 않습니다.

여기에 무슨 일이 벌어지고 있는지 궁금하십니까? Django에서 사용하는 정교한 현금 메커니즘이 있습니까?

답변

10

장고의 TestCasewrapping every test in its own transaction입니다. ORM을 통해 요청할 때마다 데이터베이스가 사용되지 않습니다.

+0

감사합니다. 그냥 내가 그것을 풀지 않을거야 ...-) – Uzi

+5

트랜잭션을 사용하지 않으려면 일시적으로 TestCase보다는 TransactionTestCase에서 상속 할 수 있습니다. 다소 혼란 스럽습니다. TestCase는 TransactionTestCase를 상속하지만 "모든 테스트를 트랜잭션으로 처리하고, 아무 것도하지 않기 위해 실제 트랜잭션 관리 루틴을 수정합니다 ...". 이것은 작동하지만 디버깅에 매우 유용합니다. 네, 저도 같은 생각이었습니다. "나는 그것을 잃고 있습니까?" 순간. TransactionTestCase 대신 TestCase를 사용하려는 이유는 트랜잭션을 롤백하면 테이블을 잘라내는 것보다 빠르기 때문입니다. –

관련 문제