Ich führe einen Komponententest mit dem Django-Framework und bekomme diesen Fehler.ProgrammingError: (1146, "Tabelle 'test_ <DB>. <TABLE>' existiert nicht") beim Ausführen von Komponententest für Django
Das Ausführen des eigentlichen Codes hat dieses Problem nicht, das Ausführen der Unit-Tests erstellt eine Testdatenbank im laufenden Betrieb, so dass ich vermute, dass das Problem dort liegt.
Der Code, der den Fehler wirft wie folgt aussieht
member = Member.objects.get(email=email_address)
und das Modell sieht aus wie
class Member(models.Model):
member_id = models.IntegerField(primary_key=True)
created_on = models.DateTimeField(editable=False, default=datetime.datetime.utcnow())
flags = models.IntegerField(default=0)
email = models.CharField(max_length=150, blank=True)
phone = models.CharField(max_length=150, blank=True)
country_iso = models.CharField(max_length=6, blank=True)
location_id = models.IntegerField(null=True, blank=True)
facebook_uid = models.IntegerField(null=True, blank=True)
utc_offset = models.IntegerField(null=True, blank=True)
tokens = models.CharField(max_length=3000, blank=True)
class Meta:
db_table = u'member'
gibt es nichts zu seltsam es ich sehen kann.
der Benutzer die Tests laufen die gleichen Berechtigungen für den Datenbankserver als Benutzer, der die Website
läuftdies django 1.1 auf MariaDB auf osx läuft
MJ-2:mysite Marsh$ python manage.py test sitecoming
Creating test database...
Creating table django_content_type
Creating table django_session
Creating table django_site
Creating table djangodblog_errorbatch
Creating table djangodblog_error
Installing index for djangodblog.ErrorBatch model
Installing index for djangodblog.Error model
E
======================================================================
ERROR: test_index (mysite.sitecoming.tests.SiteComingTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/Marsh/Development/deal/src/mysite/sitecoming/tests.py", line 19, in test_index
response = c.post('/submit', {'email':'[email protected]'})
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/test/client.py", line 313, in post
response = self.request(**r)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/core/handlers/base.py", line 92, in get_response
response = callback(request, *callback_args, **callback_kwargs)
File "/Users/Marsh/Development/deal/src/mysite/sitecoming/views.py", line 49, in submit
member = Member.objects.get(email=email_address)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/db/models/manager.py", line 120, in get
return self.get_query_set().get(*args, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/db/models/query.py", line 300, in get
num = len(clone)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/db/models/query.py", line 81, in __len__
self._result_cache = list(self.iterator())
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/db/models/query.py", line 238, in iterator
for row in self.query.results_iter():
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/db/models/sql/query.py", line 287, in results_iter
for rows in self.execute_sql(MULTI):
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/db/models/sql/query.py", line 2369, in execute_sql
cursor.execute(sql, params)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/django/db/backends/mysql/base.py", line 84, in execute
return self.cursor.execute(query, args)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/MySQL_python-1.2.3c1-py2.6-macosx-10.3-fat.egg/MySQLdb/cursors.py", line 173, in execute
self.errorhandler(self, exc, value)
File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/MySQL_python-1.2.3c1-py2.6-macosx-10.3-fat.egg/MySQLdb/connections.py", line 36, in defaulterrorhandler
raise errorclass, errorvalue
ProgrammingError: (1146, "Table 'test_deal.member' doesn't exist")
----------------------------------------------------------------------
Ran 1 test in 0.447s
FAILED (errors=1)
Destroying test database...
wo sonst kann ich schauen sehen, was schief läuft, warum wird dieser Tisch nicht erstellt?
update - Das Problem scheint zu sein, dass beim Ausführen der Komponententests die Modelle, die zum Generieren der Testdatenbank verwendet werden, aus der Anwendung stammen und nicht aus dem Projekt. Das scheint ein seltsames Verhalten und eine Verletzung von DRY zu sein, damit ich die Modelldatei in jeder Anwendung anstatt zentral im Projekt kopieren muss.
kann jemand vorschlagen, wie man das umgeht?
** Update 2 ** - Projektstruktur sieht wie folgt aus:
Projektstruktur wie folgt aussieht:
/mysite (www.whatever.com)
/application1 (facebook app, handles all urls beginning with /fb)
/application2 (www app, handles everything else in the root dir of the site)
i fb Funktionalität getrennt von dem Rest der Seite halten wollen, aber sie teilen die gleiche db. mache ich es falsch?
Sie scheinen ein Missverständnis darüber zu haben, wo Modelle leben - sie * leben * in der Anwendung, nicht im "Projekt", das nur eine Sammlung von Apps mit einer Einstellungsdatei ist. Können Sie Ihre Projektstruktur posten? –
Haben Sie definitiv das vollständige Modell für uns eingefügt? Du hast nicht etwas wie 'gemanaged = True' vergessen, oder? –