2012-07-30 6 views
7

Ich habe django-nose 1.0 als test runner für ein Django 1.3.1 project installiert. Ich befolge die Anweisungen on the pypi page in Bezug auf Test-Only-Modelle.Django-nose erstellt keine test-only-modelle während testläufen

Hier ist meine settings.py testrunner config:

TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'

I-Tests für mehrere Monate mit dieser testrunner ohne Problem ausgeführt haben. Jetzt versuche ich eine abstrakte Klasse zu testen, und ich benutze ein Nur-Test-Modell, aber der spezifische Test, den ich geschrieben habe, gibt einen Fehler aus.

Gemäß der Dokumentation muss ich nur die Testklasse in eine der Dateien aufnehmen, die während des Tests importiert wird. Ich habe die Tests in einem "Test" -Ordner und in mehrere kleinere Testdateien aufgeteilt. Hier ist meine Tests/model_tests.py (Modelle und App absichtlich aus beruflichen Gründen umbenannt):

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] 

ich einen Fehler in der ersten Zeile des setUp Empfang:

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

Und wenn ich setzen Ein Breakpoint in den Test und inspizieren die Datenbank, die Tabelle 'Tests_foo' (oder eine Tabelle mit 'foo' im Namen) existiert nicht.

Irgendwelche Ideen, warum das Test-Only-Modell nicht geladen wird?

+0

ich den gleichen Fehler jetzt mit 1,5. Wie hast du das gelöst, bitte? –

Antwort

0

Yup, scheint wie das immer noch ein Problem ist. Sah es mit django == 1.6 und django-Nase == 1.3

Eine Abhilfe alle Modelle in __init__.py in Ihrem tests/ Ordner

relevantes Thema auf GitHub setzen ist: django-nose/issues/77

0

Sie Modell erstellen müssen Um dies zu tun, müssen Sie in der Testdatenbank eine Migration erstellen oder die Tabelle in der Datenbank manuell erstellen. Sie können meine Umsetzung der zweiten Variante https://github.com/erm0l0v/django-fake-model

Dieser Code sollte überprüfen, wie erwartet:

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]