在django中为测试创建一个单独的干净数据库

问题描述 投票:1回答:1

嗨,我想为测试创建一个单独的空数据库。我在django docs(https://docs.djangoproject.com/en/2.1/topics/testing/overview/)上读到:

通过将test_预先添加到DATABASES中每个NAME的值来创建默认测试数据库名称。使用SQLite时,默认情况下测试将使用内存数据库(即数据库将在内存中创建,完全绕过文件系统!)。 DATABASES中的TEST字典提供了许多配置测试数据库的设置。例如,如果要使用其他数据库名称,请在TEST字典中为DATABASES中的任何给定数据库指定NAME。

所以我尝试过:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    },
    'test_db': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'test_db.sqlite3'),
    }
}

但是在运行它们时,测试仍然使用默认数据库

./manage.py test

如何为测试目的创建和指定新的空数据库?

django
1个回答
1
投票

我想你误解了文档。 Django自动使用一个单独的数据库。

说你的配置文件如下:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

然后Django将不使用'default'数据库,如果数据库的名称是'FOO',它将创建一个名为test_FOO的数据库。这样测试和运行Django项目应该 - 当然不要“修补”这种行为 - 不要干扰(至少不要干扰数据库)。

如果您想要指定不同的NAME(或其他属性),可以在数据库中添加'TEST' key [Django-doc],例如:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        'TEST': {
            'NAME': os.path.join(BASE_DIR, 'other_db.sqlite3'),
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.