[英]Django testing: Got an error creating the test database: database "database_name" already exists
我有测试问题。 这是我第一次写测试,我有一个问题。
我刚刚在我的应用程序users
创建了一个 test 文件夹,并在test_urls.py
创建了一个用于测试 url 的文件夹。
当我输入:
python manage.py test users
它说:
为别名“default”创建测试数据库...创建测试数据库时出错:数据库“database_name”已经存在
如果您想尝试删除测试数据库“database_name”,请输入“yes”,或者输入“no”取消:
这是什么意思? 如果我输入 yes 会发生什么? 我会丢失数据库中的所有数据吗?
在测试时,Django会创建一个测试数据库,以便您的开发数据库不会受到污染。 错误消息显示Django正在尝试创建名为"database_name"
的测试数据库,并且该数据库已存在。 您应该检查您正在使用的数据库软件的表并检查database_name
,它可能是错误地创建的。
如果键入yes,则将删除数据库database_name
并且您不太可能恢复数据 。 因此,首先要了解发生了什么。
您应该在settings.py
中settings.py
测试数据库的名称。 DATABASE
设置中有一个特定的TEST
字典 :
settings.py
...
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'USER': 'mydatabaseuser',
'NAME': 'mydatabase',
'TEST': {
'NAME': 'mytestdatabase',
},
},
}
...
默认情况下,前缀test_
将添加到开发数据库的名称中。 你应该检查你的settings.py
来检查发生了什么。
来自文档 :
通过将
test_
预先添加到DATABASES
中每个NAME
的值来创建默认测试数据库名称。 使用SQLite时,默认情况下测试将使用内存数据库(即数据库将在内存中创建,完全绕过文件系统!)。DATABASES
的TEST
字典提供了许多配置测试数据库的设置。 例如,如果要使用其他数据库名称,请在TEST
字典中为DATABASES
任何给定数据库指定NAME。
FWIW,如果您在使用--keepdb
参数时收到这样的警告,例如
python manage.py test --keepdb [appname]
那么这通常意味着Client
多个实例被实例化,也许每个测试一个。 解决方案是为测试类创建一个客户端,并在所有相应的方法中引用它,如下所示:
from djanog.test import TestCase, Client
class MyTest(TestCase):
def setUp(self):
self.client = Client()
def test_one(self):
response = self.client.get('/path/one/')
# assertions
def test_two(self):
response = self.client.post('/path/two/', {'some': 'data'})
# assertions
您还可以(未经验证)使用setUpClass
类方法创建静态客户端。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.