2016-10-15 1 views
-1

existiert habe ich einen einfachen Testfall wie folgt aus:Django Unitest: Tabelle nicht

from unittest import TestCase 
import user_manager 


class UserTest(TestCase): 
    def test_register(self): 
     email = "[email protected]" 
     password = "123456" 
     result, user = user_manager.setup_new_user(email, password) 
     self.assertEqual(result, CodeID.SUCCESS) 

Dann laufe ich den Testfall:

python manage.py test users 

Und hier ist das Protokoll:

Creating test database for alias 'default'... 
/Users/admin/Projects/MyApp/venv/lib/python2.7/site-packages/django/db/backends/mysql/base.py:112: Warning: Table 'mysql.column_stats' doesn't exist 
    return self.cursor.execute(query, args) 
Creating test database for alias 'myapp_log'... 
.FE 
====================================================================== 
ERROR: test_register (users.tests.UserTest) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
... 
ProgrammingError: (1146, "Table 'test_myapp.user' doesn't exist") 

So erstellt es eine Test-Datenbank, aber es scheint, als ob es die Tabellen nicht erstellt. Hier ist meine DATABASES Einstellung:

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.mysql', 
     'NAME': "myapp", 
     'USER': "root", 
     'PASSWORD': "", 
     'HOST': '127.0.0.1', 
     'PORT': '', 
    }, 
    'myapp_log': { 
     'ENGINE': 'django.db.backends.mysql', 
     'NAME': "myapp_log", 
     'USER': "root", 
     'PASSWORD': "", 
     'HOST': '127.0.0.1', 
     'PORT': '', 
    }, 
} 

Und mein Modell:

class User(BaseModel): 
    uid = models.IntegerField(primary_key=True) 
    email = models.CharField(max_length=200) 
    password = models.CharField(max_length=200) 
    create_time = models.IntegerField() 
    update_time = models.IntegerField() 
    status = models.IntegerField() 
    social_token = models.CharField(max_length=200) 
    social_app = models.IntegerField() 

    class Meta: 
     db_table = 'user' 

Wer weiß, warum die Tabelle 'user' nicht erstellt wird?

UPDATE:

user_manager von meinem Testfall wird einige Abfrage tun und neuen Datensatz auf dem Tisch Benutzer hinzufügen.

Und ich dachte, wenn ich den Testfall ausführe, würde Django irgendwie meine Modelle lesen und eine Testdatenbank mit allen Tabellen dieser Modelle erstellen. Habe ich Recht damit?

Antwort

0

Ihre Testdatenbank muss sich von Ihrer Produktionsdatenbank unterscheiden. Testdatenbanken werden zerstört, sobald die Testfälle ausgeführt werden. In Ihrem Fall wurde die Datenbank nicht erstellt. Sie sollten für detaillierte Informationen über diese Dokumentation gehen https://docs.djangoproject.com/en/1.10/topics/testing/overview/ Können Sie auch das Snippet Ihrer user_manager Modul hinzufügen

+0

Mein user_manager einige Abfrage und neuen Datensatz für Tabelle Benutzer hinzufügen. Also sollte ich eine neue Datenbank nur für den Test erstellen, dachte ich, dass Django meine Modelle irgendwie lesen, Datenbank erstellen und zerstören würde, wenn sie fertig sind? –

+0

In Ihrer Testdatei müssen Sie die Modelle importieren, die Sie verwenden möchten, dann definieren Sie eine Einrichtungsmethode, in der Sie Ihre Modellinstanzen erstellen und später Ihre Assertionen definieren –

+0

Ich habe herausgefunden, dass ich meine models.py-Datei hinzufügen muss Mein App-Ordner, und die Tabellen wurden erstellt. Danke für deine Hilfe @VaibhavSingh –

0

So fand ich heraus, dass ich meine models.py in meinem Benutzer-Ordner müssen und ‚Nutzer‘ in die INSTALL_APPS hinzufügen setzen Rahmen. Jetzt hat es funktioniert.

Verwandte Themen