连接到django中的测试数据库时出现问题
我正在用Postgres对Django(2.2.3)进行测试 根据,在运行测试时,它应该通过在普通数据库名称前面加上test\uu来创建一个名为的一次性数据库 然而,这并没有发生在我身上:测试使用的是普通数据库!(间歇性-请参见编辑) 以下是相关设置:连接到django中的测试数据库时出现问题,django,postgresql,Django,Postgresql,我正在用Postgres对Django(2.2.3)进行测试 根据,在运行测试时,它应该通过在普通数据库名称前面加上test\uu来创建一个名为的一次性数据库 然而,这并没有发生在我身上:测试使用的是普通数据库!(间歇性-请参见编辑) 以下是相关设置: # Another module where I define these values from conf.vars import DB_HOST, DB_NAME, DB_PASSWORD, DB_USER DATABASES = {
# Another module where I define these values
from conf.vars import DB_HOST, DB_NAME, DB_PASSWORD, DB_USER
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'HOST': DB_HOST,
'NAME': DB_NAME,
'USER': DB_USER,
'PASSWORD': DB_PASSWORD,
# I added the following to see if it makes a difference, but no.
'TEST': {
'NAME': 'test_' + DB_NAME,
},
}
}
我的manage.py文件包含以下内容:
execute_from_command_line(sys.argv)
编辑:发生了一些非常奇怪的事情
我检测到此问题的原因是FactoryBoy在使用生成的电子邮件创建用户时抛出了FK冲突(对此我有一个唯一的约束),但事实并非如此。这让我意识到测试是连接到主数据库的,而不是一次性的
class UserFactory(factory.django.DjangoModelFactory):
class Meta:
model = settings.AUTH_USER_MODEL
name = factory.Sequence(lambda n: "User %03d" % n)
email = factory.Sequence(lambda n: "email %03d" % n)
password = make_password('welcome')
如果我从主数据库中删除用户,然后重新运行测试,在打印输出中,它会告诉我为别名“default”创建测试数据库…
(连接参数上的打印输出显示它正在创建一个带有测试前缀的一次性数据库)-但是测试失败,因为键(用户id)=(61)在表“user\u user”中不存在。
这很混乱,因为您可能认为FactoryBoy的序列会重置
如果我再次运行测试而不对代码或数据库进行任何更改,我不会得到打印输出,告诉我为别名“default”创建测试数据库…
,实际上它连接到主数据库,并且我得到键(email)=(email 000)已经存在。
错误
如果我再次删除记录,它会返回到创建测试数据库的前一个状态,但仍然失败
如果我删除了主数据库,我将无法运行测试,因为它似乎想在第一个实例中连接到主数据库
我是在对Postgres做一些愚蠢的事情,还是在缓存连接或其他什么