【问题标题】:Django 1.7 tests against production DB rather than create test DBDjango 1.7 测试生产数据库而不是创建测试数据库
【发布时间】:2016-08-29 15:31:14
【问题描述】:

我收到了 django-1.7 安装,并要求我为内部 django 模块进行测试。 (具体来说,我们正在运行 Django==1.7.9psycopg2==2.5.4

在头疼了两天之后,我仍然发现当我运行 manage.py test mymodule 时,它是针对 生产 postgres 数据库进行测试,而不是创建一个测试数据库来安装我的夹具数据.

奇怪的是,我根本没有收到任何错误消息或任何迹象表明它正在尝试创建测试数据库。测试套件只是针对生产数据库进行测试。

我已验证我正在运行的用户在 postgres 中对测试数据库具有 CREATE/DROP 权限。

根据文档,我还尝试通过将 TEST 数据库引擎指定为内置 sqlite3 来让我的测试套件使用内存数据库,如下所示:

DATABASES = {
  'default': {
    'NAME': DATABASE_NAME,
    'PASSWORD': 'nottherealpassword',
    'ENGINE': 'django.db.backends.postgresql_psycopg2',
    'USER': 'nottherealdbuser',
    'PORT': '5432',
    'HOST': '127.0.0.1',
    'TEST': {
            'ENGINE': 'django.db.backends.sqlite3'
            }
    },
  }

这种配置的行为也没有变化,也没有迹象表明它甚至尝试创建一个。在某些情况下,测试运行者甚至拒绝尝试为给定模块创建测试数据库?我已经尝试了默认的 django 运行程序以及 django_nose,但行为没有任何变化。

我的首选结果是针对我将填充固定装置的小型内存数据库进行测试;我的第二个首选结果是在 postgres 中创建一个测试数据库,但无需从一开始就运行每个迁移。

【问题讨论】:

  • 您正在运行什么样的测试?单元测试?您是否在测试中专门使用 LiveServerTestCase 以便针对垃圾数据库进行测试?您可以发布您的一项测试的样本吗?
  • 我正在尝试单元测试,是的。 LiveServerTestCase 在 1.7 之后的某个时间出现,所以它不可用......并且常规的 django.test.TestCase 据称处理测试数据库的创建,所以如果我需要使用不同的案例,我会感到惊讶。

标签: django database django-testing django-tests


【解决方案1】:

事实证明,我们曾经/正在使用多数据库设置。将 DATABASE_ROUTERS 设置为空白可迭代 [] 重新启用测试数据库创建。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-20
    • 1970-01-01
    • 2012-10-05
    • 2023-01-28
    • 1970-01-01
    • 1970-01-01
    • 2020-11-17
    • 2019-09-05
    相关资源
    最近更新 更多