【发布时间】:2019-01-01 09:39:02
【问题描述】:
我有一个 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*
问题出现在 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
在这方面寻求任何帮助,无论是解决问题的新方法还是对我的改进。
TLDR;我需要能够修改 django 单元测试创建的数据库中的数据。
【问题讨论】:
-
@Ryan w 你能找到解决方案吗?我面临同样的问题:) 谢谢
标签: python django database shell docker