2016-07-20 5 views
2

Meine Django-Anwendung läuft gut, aber ich habe ein Problem mit Djangos integriertem Komponententest. Wenn auf einer App, die Django Test Runner läuft mit einer anderen Datenbank als der Standarddatenbank bekomme ich einen Fehler:Django-Test-Runner kann keine nicht standardmäßige Datenbankverbindung finden

python manage.py test qc 
...  
File "/usr/lib64/python2.7/site-packages/django/db/utils.py", line 179, in ensure_defaults 
     raise ConnectionDoesNotExist("The connection %s doesn't exist" % alias) 
    ConnectionDoesNotExist: The connection other_db doesn't exist 

In settings.py:

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.mysql', 
     'NAME': 'db_default', 
     'USER': 'xxx', 
     'PASSWORD': 'yyy', 
     'HOST': os.environ["MYSQL_HOST"], 
     'PORT': os.environ["MYSQL_PORT"], 
    }, 
    'other_db': { 
     'ENGINE': 'django.db.backends.mysql', 
     'NAME': 'db_other', 
     'USER': 'xxx', 
     'PASSWORD': 'yyy', 
     'HOST': os.environ["MYSQL_HOST"], 
     'PORT': os.environ["MYSQL_PORT"], 
    } 
} 

Vielleicht relevant, in routers.py:

def allow_migrate(self, db, app_label, model_name=None, **hints): 

    if hints.has_key('model'): 
     model = hints['model'] 

     if db == 'other_db': 
      return model._meta.app_label == 'qc' 
     elif model._meta.app_label == 'qc': 
      return False 
     return None 
    else: 
     if db == 'other_db': 
      return app_label == 'qc' 
     elif app_label == 'qc': 
      return False 

Der Testfall ich in laufen bin versucht qc/tests.py:

from django.test import TestCase 
from qc.models import * 

class HybridTestCase(TestCase): 

    def setUp(self): 
     baseA = MyModel.objects.create(id='A',name="NonName") 

Django Version: 1.9.8. Im leite in einem Docker mit CentOS 7.

Antwort

1

Das Problem war ich das DATABASES Wörterbuch in der settings.py Datei, bei einem Test überschrieben hatte: für die

if 'test' in sys.argv: 
    DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3'}} 

Nach Zugabe einer Memory-Datenbank 'other_db' hat wieder funktioniert:

if 'test' in sys.argv: 
    DATABASES = { 
       'default': {'ENGINE': 'django.db.backends.sqlite3'}, 
       'other_db': {'ENGINE': 'django.db.backends.sqlite3'} 
       }