2017-05-02 7 views
0

私は、トランザクションを含むdjangoビューをテストしようとしています。特に、私は使用するdbをtransaction.atomic(using=myDb)で指定します。しかし、私は私のテストを実行するとdjango.db.utils.ConnectionDoesNotExist: The connection myDb doesn't existを取得します。transaction.atomic(using = myDb)を持つDjangoビューをテストするには?

私はテストでmyDbをヒットしていないので、ビューをテストする方法はありますか?ご協力いただきありがとうございます!

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

「myDb」とは何ですか?その名前のデータベースがセットアップされていますか? – knbk

+0

はい、私は自分のプロジェクトに複数のデータベースを持っていますが、私はこのアプリケーションで使用するためにそれらの1つを指定しています。 –

+0

トレースバックを表示できますか? – knbk

答えて

0

は、みんながそれを考え出しました。そのトリックは、変数とともに使用されているdbを指定することです。 DATABASESキーは、コードがテストとして実行されているか、通常どおりに実行されているかによって異なるリストを返します。

from django.conf import settings 
if 'myDb' in settings.DATABASES: 
    db = 'myDb' 
else: 
    db = 'default' 
with transaction.atomic(using=db): 
    ... 
関連する問題