python - Django 无法在 DATABASES 'default' 为空时运行测试

标签 python django

我在使用设置 DATABASES['default'] = {} 运行测试时遇到了一些问题。

运行./manage.py test时出现以下错误

$ ./manage.py test --failfast
Creating test database for alias 'mydb'...
E
======================================================================
ERROR: test_admin (myapp.test.MyTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/thomas/.virtualenvs/tmpapp/local/lib/python2.7/site-packages/django/test/testcases.py", line 182, in __call__
    self._pre_setup()
  File "/home/thomas/.virtualenvs/tmpapp/local/lib/python2.7/site-packages/django/test/testcases.py", line 754, in _pre_setup
    self._fixture_setup()
  File "/home/thomas/.virtualenvs/tmpapp/local/lib/python2.7/site-packages/django/test/testcases.py", line 887, in _fixture_setup
    if not connections_support_transactions():
  File "/home/thomas/.virtualenvs/tmpapp/local/lib/python2.7/site-packages/django/test/testcases.py", line 874, in connections_support_transactions
    for conn in connections.all())
  File "/home/thomas/.virtualenvs/tmpapp/local/lib/python2.7/site-packages/django/test/testcases.py", line 874, in <genexpr>
    for conn in connections.all())
  File "/home/thomas/.virtualenvs/tmpapp/local/lib/python2.7/site-packages/django/utils/functional.py", line 55, in __get__
    res = instance.__dict__[self.func.__name__] = self.func(instance)
  File "/home/thomas/.virtualenvs/tmpapp/local/lib/python2.7/site-packages/django/db/backends/__init__.py", line 782, in supports_transactions
    self.connection.leave_transaction_management()
  File "/home/thomas/.virtualenvs/tmpapp/local/lib/python2.7/site-packages/django/db/backends/__init__.py", line 338, in leave_transaction_management
    if managed == self.get_autocommit():
  File "/home/thomas/.virtualenvs/tmpapp/local/lib/python2.7/site-packages/django/db/backends/__init__.py", line 345, in get_autocommit
    self.ensure_connection()
  File "/home/thomas/.virtualenvs/tmpapp/local/lib/python2.7/site-packages/django/db/backends/__init__.py", line 133, in ensure_connection
    self.connect()
  File "/home/thomas/.virtualenvs/tmpapp/local/lib/python2.7/site-packages/django/db/utils.py", line 86, in __exit__
    db_exc_type = getattr(self.wrapper.Database, dj_exc_type.__name__)
AttributeError: 'DatabaseWrapper' object has no attribute 'Database'

----------------------------------------------------------------------
Ran 0 tests in 0.001s

FAILED (errors=1)
Destroying test database for alias 'mydb'...

settings.py

..
DATABASES = {
    'default': {},
    'mydb': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    },
}
DATABASE_ROUTERS = ['myapp.router.MyRouter']

router.py

class MyRouter:
    def db_for_read(self, model, **hints):
        return 'mydb'

    def db_for_write(self, model, **hints):
        return 'mydb'

    def allow_migrate(self, db, model):
        if db == 'default':
            return False
        return True

测试.py

from django.test import TestCase                                                                                                                                       


class MyTest(TestCase):

    def test_admin(self):
        self.assertEqual(1, 1)

我做了一些调查,发现 self.connect() 是在与 'default' 别名关联的虚拟后端上调用的。由于虚拟后端没有实现太多功能,因此调用失败。如何使用 DATABASES['default'] = {} 运行测试?

最佳答案

使用不同的 settings.py 文件进行生产/开发/测试(最好)。

或者使用 Sqlite 作为默认条目(最快)。

关于python - Django 无法在 DATABASES 'default' 为空时运行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27686639/

相关文章:

python - NoReverseMatch 在/论坛/

python - Django:从那时起改变语言

django - 将 Django +1.10 与 MongoDB 连接起来

Python 从一个类继承但覆盖调用另一个类的方法?

python(或numpy)相当于R中的匹配

javascript - odoo 12 - 无法读取未定义的属性 'getBoundingClientRect'

python - rot13 无法正确翻译 python

javascript - AJAX 请求永远不会发送。为什么?

python - 在没有 Django REST 框架的情况下将 Swagger 文档添加到 Django

python - 是否可以根据用户输入的主题 ID 从字典列表中返回正确的值?