2012-07-30 9 views
7

Ho installato django-nose 1.0 come runner di test per un progetto Django 1.3.1. Sto seguendo le istruzioni on the pypi page relative ai modelli di solo test.Django-nose non crea modelli di prova durante i test

Ecco il mio settings.py config testrunner:

TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'

Ho eseguito i test per diversi mesi che utilizzano questo testrunner senza alcun problema. Ora sto provando a testare una classe astratta e sto usando un modello di solo test, ma il test specifico che ho scritto genera un errore.

Secondo la documentazione, ho solo bisogno di includere la classe di test in uno dei file che viene importato durante il test. Ho i test seduti in una cartella 'test' e suddiviso in diversi file di test più piccoli. Ecco il mio test/model_tests.py (modelli e app intenzionalmente rinominati per motivi di lavoro):

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] 

sto ricevendo un errore nella prima riga del programma di installazione:

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

E se metto un punto di rottura nel test e ispezionare il database, la tabella 'tests_foo' (o qualsiasi tabella con 'foo' nel nome) non esiste.

Qualche idea sul motivo per cui il modello di solo test non viene caricato?

+0

sto ottenendo lo stesso errore con 1.5 al momento. Come hai risolto questo, per favore? –

risposta

0

Sì, sembra che questo sia ancora un problema. Visto con Django == 1.6 e == django-naso 1.3

Una soluzione è quella di mettere tutti i modelli in __init__.py nella cartella tests/

questione rilevante su GitHub: django-nose/issues/77

0

È necessario creare il modello nel database di test, per fare ciò è necessario generare la migrazione o creare manualmente una tabella nel database. È possibile controllare la mia implementazione di seconda variante https://github.com/erm0l0v/django-fake-model

Questo codice dovrebbe funzionare come ci si aspetta:

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] 
Problemi correlati