2017-05-02 2 views
0

Ich versuche eine Django-Ansicht zu testen, die eine Transaktion enthält; insbesondere gebe ich an, welche db ich von transaction.atomic(using=myDb) verwenden möchte. Wenn ich jedoch meinen Test starte, bekomme ich django.db.utils.ConnectionDoesNotExist: The connection myDb doesn't exist.Wie testet man eine Django-Ansicht mit transaction.atomic (mit = myDb)?

Gibt es eine Möglichkeit, die Ansicht zu testen, da ich myDb im Test nicht treffe? Danke für Ihre Hilfe!

Trackeback:

Traceback (most recent call last): 
    File "C:\Python34\lib\site-packages\django\db\utils.py", line 176, in ensure_defaults 
    conn = self.databases[alias] 
KeyError: 'myDb' 

During handling of the above exception, another exception occurred: 

Traceback (most recent call last): 
    File "Z:\web-django-2\web-django\src\revisorsite\track\tests.py", line 92, in test_redirect_on_edit 
    response = Add.as_view()(request) 
    File "C:\Python34\lib\site-packages\django\views\generic\base.py", line 68, in view 
    return self.dispatch(request, *args, **kwargs) 
    File "C:\Python34\lib\site-packages\django\utils\decorators.py", line 67, in _wrapper 
    return bound_func(*args, **kwargs) 
    File "Z:\web-django-2\web-django\src\revisorsite\login\decorators.py", line 8, in wrap 
    return function(request, *args, **kwargs) 
    File "C:\Python34\lib\site-packages\django\utils\decorators.py", line 63, in bound_func 
    return func.__get__(self, type(self))(*args2, **kwargs2) 
    File "C:\Python34\lib\site-packages\django\views\generic\base.py", line 88, in dispatch 
    return handler(request, *args, **kwargs) 
    File "Z:\web-django-2\web-django\src\revisorsite\track\views.py", line 47, in post 
    transaction.set_autocommit(False, using='myDb') 
    File "C:\Python34\lib\site-packages\django\db\transaction.py", line 35, in set_autocommit 
    return get_connection(using).set_autocommit(autocommit) 
    File "C:\Python34\lib\site-packages\django\db\transaction.py", line 21, in get_connection 
    return connections[using] 
    File "C:\Python34\lib\site-packages\django\db\utils.py", line 208, in __getitem__ 
    self.ensure_defaults(alias) 
    File "C:\Python34\lib\site-packages\django\db\utils.py", line 178, in ensure_defaults 
    raise ConnectionDoesNotExist("The connection %s doesn't exist" % alias) 
django.db.utils.ConnectionDoesNotExist: The connection myDb doesn't exist 
+0

Was ist 'myDb'? Haben Sie eine Datenbank mit diesem Namen? – knbk

+0

Ja, ich habe mehrere Datenbanken in meinem Projekt und ich gebe nur eine davon für die Verwendung in dieser App an. –

+0

Können Sie das Traceback anzeigen? – knbk

Antwort

0

es herausgefunden, Jungs. Der Trick besteht darin, die Datenbank anzugeben, die mit einer Variablen verwendet wird. Der DATABASES-Schlüssel gibt eine andere Liste zurück, abhängig davon, ob der Code als Test oder normal ausgeführt wird.

from django.conf import settings 
if 'myDb' in settings.DATABASES: 
    db = 'myDb' 
else: 
    db = 'default' 
with transaction.atomic(using=db): 
    ...