【发布时间】:2019-01-09 04:38:47
【问题描述】:
我的多数据库测试问题如下:
# (django 2.0.7, python 3.6)
# settings.py:
DATABASES = {
'default':{},
'one': { # connection1 settings here }
'two': { # connection2 settings here }
}
DATABASE_ROUTERS = []
# test.py
class MyTestCase(TestCase):
def test_my_function(self):
pass # this IS literally the code
我运行python manage.py test -v 2 并看到测试运行器构建了两个模拟数据库并运行绿色测试
test_my_function (mymodule.test.MyTestCase) ... ok
然后ERROR 然后ERROR: test_get_pronunciation (languages.test_hr.HRTestCase)
有以下解释:
File "/Users/Barnabas/PycharmProjects/rhymedict-multisite/venv/lib/python3.6/site-packages/django/db/backends/dummy/base.py", line 20, in complain
raise ImproperlyConfigured("settings.DATABASES is improperly configured. "
django.core.exceptions.ImproperlyConfigured: settings.DATABASES is improperly configured. Please supply the ENGINE value. Check settings documentation for more details.
这应该意味着程序试图访问'default' 数据库。
(如果我将multi_db = True 添加到我的MyTestCase,也会发生同样的事情)
然而奇怪的是,如果我写了
class MyTestCase(TestCase):
pass
数据库是建立起来的,拆掉就好了。
我做错了什么?
更新:
self._post_teardown() 引发错误,我可以看到两个虚拟数据库之前都已成功拆除。
【问题讨论】:
-
你为什么要定义
default,而不仅仅是one和two。 -
否则我会得到
django.db.utils.ConnectionDoesNotExist: The connection default doesn't existrunserver -
是的,但是你为什么不简单地定义
one作为默认值,那么你有两个数据库,所以没有一个空的。 -
我不想这样做,因为这是两个使用几乎相同代码运行的独立站点。
https://docs.djangoproject.com/en/2.0/topics/db/multi-db/也允许我的设置。
标签: django django-models django-testing