创建一个单独的干净数据库以在Django中进行测试

时间:2018-09-02 17:17:17

标签: django

嗨,我想为测试创建一个单独的空数据库。我阅读了Django文档(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

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

1 个答案:

答案 0 :(得分:1)

我认为您误读文档。 Django自动使用单独的数据库。

说您的配置文件如下:

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

然后Django将使用'default'数据库,如果数据库名称为'FOO',它将创建一个名称为 {{1 }} 。这样,测试和运行Django项目应该-在没有“修补”此行为的情况下-应该不会造成干扰(至少不会影响数据库)。

但是,如果您要指定 test_FOO(或其他属性),则可以在数据库中添加'TEST' key [Django-doc],例如:

NAME