我有一个Django应用程序,并对其运行一些单元测试。问题不在于某个测试向测试数据库中插入数据,而是在其后的测试中。由于每个测试都没有保存事务,因此来自先前测试的条目不存在,这很正常,尽管自动增量ID仍在增加,就好像仍然有条目插入到数据库中。我需要解决这个问题,因为我正在插入更多数据,其中无法控制所赋予的ID,并且需要能够获取此特定数据进行测试。如果我硬编码代码以抓取对象,那么每次添加新测试时都必须更改代码,这并不理想。
我有多个测试正在运行,但为了简单起见,我将展示两个。
问题出现在test_model_test2中,当我尝试获取新数据时,我必须打印对象以查看id以便能够获取它。
我有一个解决方案,可以在实际数据库上修复它,但不能在测试环境上修复。对于我的情况,我需要连接到docker容器并运行psql命令来重置table_id_seq。
当我运行这个程序时,我遇到了以下错误。
我有多个测试正在运行,但为了简单起见,我将展示两个。
from django.test import TestCase
from app.models import Model
class VersionMerge(TestCase):
fixtures = ['initial_test_data.json']
def test_model_test1(self):
*Insert new data*
*grab new data in*
*Check data*
def test_model_test2(self):
*Insert new data*
*grab new data*
*Check data*
问题出现在test_model_test2中,当我尝试获取新数据时,我必须打印对象以查看id以便能够获取它。
我有一个解决方案,可以在实际数据库上修复它,但不能在测试环境上修复。对于我的情况,我需要连接到docker容器并运行psql命令来重置table_id_seq。
docker exec -t $CONTAINER_ID psql --dbname=test_database_name -username=user -c "SELECT setval('modelName_appName_id_seq', 2, true)"
这将进入表格并设置上次使用的最后一个id值为2,以使下一个id变为3。但是,每当我尝试从python内部运行该命令时,就会出现以下情况:
cmd = "command above"
os.system(cmd)
当我运行这个程序时,我遇到了以下错误。
sh: 1: docker: not found
sh: 1: docker: not found
我需要你的帮助,要么提供一个新的解决方案,要么改进我的解决方案。
简而言之,我需要能够修改django单元测试创建的数据库中的数据。