2012-07-30 9 views
7

Mam django-nos 1.0 zainstalowany jako test biegacza dla projektu Django 1.3.1. Postępuję zgodnie z instrukcjami on the pypi page dotyczących modeli tylko testowych.Django-nos nie tworzy modeli testowych tylko podczas testów.

Oto moja settings.py TestRunner config:

TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'

Zabrakło mi testy na kilka miesięcy za pomocą tego TestRunner bez problemu. Teraz próbuję przetestować klasę abstrakcyjną i używam modelu testowego, ale test, który napisałem, powoduje błąd.

Zgodnie z dokumentacją, wystarczy dołączyć klasę testową do jednego z plików zaimportowanych podczas testowania. Mam testy znajdujące się w folderze "testy" i podzielone na kilka mniejszych plików testowych. Oto moich testów/model_tests.py (modele i aplikacja celowo przemianowany ze względu na pracę):

from django.tests import TestCase 
from myapp.models import AbstractFoo 

class Foo(AbstractFoo): 
    pass 


class TestFoo(TestCase): 
    def setUp(self): 
     self.foo = Foo.objects.create(name="Tester", 
             description="This is a test", ...) 
    ... [tests follow] 

Otrzymuję błąd w pierwszym wierszu Setup:

DatabaseError: relation "tests_foo" does not exist 
LINE 1: INSERT INTO "tests_foo" ("name", "description", "display... 

A jeśli kładę Punkt przerwania testu i inspekcji bazy danych, tabela "tests_foo" (lub jakakolwiek tabela z "foo" w nazwie) nie istnieje.

Jakieś pomysły na temat tego, dlaczego model testowy nie ładuje się?

+0

Dostaję ten sam błąd z 1.5 teraz. Jak to rozwiązałeś, proszę? –

Odpowiedz

0

Tak, wygląda na to, że problem nadal występuje. Widziałem to z Django == 1,6 oraz django-nos == 1,3

Jednym rozwiązaniem jest umieszczenie wszystkich modeli w __init__.py w folderze tests/

istotną kwestią na GitHub: django-nose/issues/77

0

Musisz utworzyć modelu w testowej bazie danych, aby to zrobić, musisz ręcznie wygenerować migrację lub utworzyć tabelę w bazie danych. Można sprawdzić moje realizację drugiego wariantu https://github.com/erm0l0v/django-fake-model

Kod ten powinien działać zgodnie z oczekiwaniami:

from django.tests import TestCase 
from myapp.models import AbstractFoo 

from django_fake_model import models as f 


class Foo(f.FakeModel, AbstractFoo): 
    pass 


@Foo.fake_me 
class TestFoo(TestCase): 
    def setUp(self): 
     self.foo = Foo.objects.create(name="Tester", 
             description="This is a test", ...) 
    ... [tests follow] 
Powiązane problemy