【问题标题】:Access Django Test Database访问 Django 测试数据库
【发布时间】:2020-05-02 16:51:42
【问题描述】:

我有一个在 Heroku 上运行的 API,并且希望能够使用测试数据库对其进行测试。我的问题是 TestCase setUp(self) 方法将数据添加到自动创建的测试数据库中。然后我的测试将 POST 请求发送到其本地运行的版本。然后,该代码仅使用常规默认数据库,而不是运行测试的测试数据库。

这是一些代码和我尝试过的。

在我的主要 settings.py 中,我将数据库命名为这样

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': 'theOneTrueDB',
    }
}

我在这里读到 (https://docs.djangoproject.com/en/3.0/topics/testing/overview/#the-test-database)

默认测试数据库名称是通过在 DATABASES 中每个 NAME 的值前面添加 test_ 来创建的。

所以我在我的视图文件中找到了我可以做的一个应用程序 Tenant.objects.using('test_theOneTrueDB').all() 这会起作用,但它说

django.db.utils.ConnectionDoesNotExist:连接 test_theOneTrueDB 不存在

我也试过了

Tenant.objects.using('test_default')

还有很多其他的东西。我迷路了。我也可以设置另一个数据库,然后在设置中使用它

Tenant.objects.save(using='theOneTrueDBTest)

或类似的东西。

任何帮助将不胜感激!

编辑: 我知道我的设置是这样的

DATABASES = {
    'default': {
        'NAME': 'theOneTrueDB',
        'ENGINE': 'django.db.backends.sqlite3',
    },
    'other': {
        'NAME': 'theOneTrueTest',
        'ENGINE': 'django.db.backends.sqlite3',
    }
}

但是如果我尝试像这样保存到其他数据库

tempPM.save(using='other')

然后我得到这个错误

AssertionError:此测试中不允许对“其他”进行数据库查询。将“其他”添加到 API.tests.TenantLogin.databases 以确保正确的测试隔离并消除此故障。

【问题讨论】:

    标签: python django database unit-testing django-models


    【解决方案1】:

    您不需要直接访问测试数据库。默认情况下会使用它,您无需担心。

    默认情况下sqlite3后端将使用内存数据库,名称如file:memorydb_default?mode=memory&cache=shared, 您可以通过以下方式在测试运行时检查设置:

    from django.conf import settings
    print(settings.DATABASES)
    

    【讨论】:

    • 查看sqlite3 backend的源代码中的详细信息。
    • 如果我使用--keepdb 并且我想使用 DBMS 应用程序检查数据库,我该怎么做?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-26
    • 2011-11-24
    • 2020-12-30
    • 2018-11-02
    • 2015-03-15
    • 1970-01-01
    相关资源
    最近更新 更多