2012-04-28 18 views
11

Mam projekt Django, który używa lokalnego serwera PostgreSQL. Używam debuggera do debugowania niektórych dziwnych błędów, które mam. Podczas gdy debugger został zatrzymany w jednym z testów, próbowałem spojrzeć na testową bazę danych. Widzę tę nową bazę danych (test_project1) i wszystkie schematy są zdefiniowane tak, jak powinny. Ale wszystkie tabele są puste.Baza danych testu Django wygląda pusto podczas testu jest uruchamiana

Wiem, że tabele nie są puste: - Użyłem urządzenia i niektóre testy już uruchomiły się i zwróciły dane. - Test post utworzony nowy użytkownik zwrócił 201 kod stanu.

A jednak nie widzę danych, gdy próbuję uzyskać dostęp do bazy danych za pomocą pgAdmin3 lub psql.

Masz pojęcie, co się tutaj dzieje? Czy istnieje jakiś zaawansowany mechanizm kasowy, z którego korzysta Django?

Odpowiedz

10

Django to TestCase jest wrapping every test in its own transaction. W związku z tym baza danych nie jest używana w żadnym przypadku, gdy wykonujesz żądanie za pośrednictwem ORM.

+0

Dzięki. Po prostu chciałem się upewnić, że go nie stracę ... :-) – Uzi

+5

Jeśli chcesz wyłączyć transakcję, możesz tymczasowo dziedziczyć po TransactionTestCase zamiast w TestCase. To trochę zagmatwane: TestCase dziedziczy po TransactionTestCase, ale "ale otacza każdy test transakcją, małpa łata prawdziwe procedury zarządzania transakcjami, aby nic nie robić ...". Działa to jednak i jest bardzo przydatne do debugowania. Tak, miałem to samo, "czy to tracę?" za chwilę. Powodem, dla którego chciałbyś używać TestCase zamiast TransactionTestCase, jest to, że wycofanie transakcji jest szybsze niż obcinanie tabel. –