2013-08-06 8 views
6

Moje Django aplikacja działa z tabel, które nie są zarządzane i mają następujące zdefiniowane w moim modelu tak:przebiegu testy z niezarządzani tabel w Django

class Meta: 
    managed = False 
    db_table = 'mytable' 

Kiedy uruchomić prosty test, który importuje osobą, się, co następuje:

(person)[email protected] ~/person/dapi $ > python manage.py test 
Creating test database for alias 'default'... 
DatabaseError: (1060, "Duplicate column name 'db_Om_no'") 

tests.py jest dość prosta tak:

import person.management.commands.dorecall 
from person.models import Person 
from django.test import TestCase 
import pdb 

class EmailSendTests(TestCase): 
    def test_send_email(self): 
     person = Person.objects.all()[0] 
     Command.send_email() 

czytałem w django docs, gdzie jest napisane: "W przypadku testów obejmujących modele z managed = False, to od Ciebie zależy, czy w ramach konfiguracji testu zostaną utworzone prawidłowe tabele.". Rozumiem, że moim problemem jest to, że nie utworzyłem odpowiednich tabel. Więc mam utworzyć kopię tabel w db test_person, które utworzono ramy testowe?

Za każdym razem, gdy przeprowadzam testy, db zostaje zniszczony (jak sądzę) i ponownie skonfigurowany, więc w jaki sposób mam utworzyć kopię tabel w test_person. Czy ja myślę o tym dobrze?

Aktualizacja:

Widziałem this question on SO i dodaje ManagedModelTestRunner() w utils.py. Mimo że ManagedModelTestRunner() zostaje uruchomiony (potwierdzony przez wstawienie pbd.set_trace()), nadal pojawia się błąd Duplicate column name. Nie dostaję błędów, gdy robię python manage.py syncdb (choć to może nie oznaczać wiele, ponieważ tabele są już utworzone - spróbuję usunąć tabelę i ponownie uruchomić syncdb, aby zobaczyć, czy mogę uzyskać jakieś wskazówki).

Odpowiedz

2

Miałem ten sam problem, w którym miałem niezarządzaną starszą bazę danych, która również miała niestandardową nazwę bazy danych ustawioną w meta-metodzie model.

Running testy z zarządzanego testowym modelu lekkoatleta, jak związana, rozwiązać połowę mojego problemu, ale wciąż miałem problem Django nie wiedząc o nazwie custom_db:

django.db.utils.ProgrammingError: relation "custom_db" does not exist 

emisji wyniosła że ./manage.py makemigrations nadal tworzy definicje wszystkich modeli, zarządzanych lub nie, i zawiera własne niestandardowe nazwy w definicji, co wydaje się wysadzić testy. Instalując:

pip install django-test-without-migrations==0.2 

i uruchamiania testów tak:

./manage.py test --nomigrations 

udało mi się pisać testy przed moim niekontrolowana modelu bez uzyskiwania jakichkolwiek błędów.

+0

Wiem, że ten post jest stary, ale mam nadzieję, że to pomoże komuś. – rgilligan

+0

Lifesaver. Wielkie dzięki. Praca ze starszą bazą danych w Django to PITA. – khajvah

Powiązane problemy