我有一个 django 应用程序,我正在其上运行一些单元测试。所以我遇到的问题不是当一个测试插入测试数据库时。这是随后的测试。由于每个测试都不保存交易,因此先前测试的条目不存在这很好,尽管自动增量 id 正在增加,就好像数据库中仍然有条目一样。我需要修复这个问题,因为我要插入更多数据,而我无法控制为其提供的 id,并且需要能够获取此特定数据进行测试。如果我对代码进行硬编码以获取对象,则每次添加新测试时都必须更改代码,这并不理想。
我正在运行多个测试,但为了简单起见,我将显示两个。
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*
问题出现在测试模型测试2当我尝试获取新数据时,我必须打印出对象才能查看 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 单元测试创建的数据库中的数据。