嗨,我想为测试创建一个单独的空数据库。我在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自动使用一个单独的数据库。
说你的配置文件如下:
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'),
}
}
}