- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我又发了一篇关于这个 issue 的帖子,我想我会进一步分解它,看看 StackOverflow 的好人是否能弄清楚发生了什么,因为我做不到。因此,我使用 setUpTestData
在下面生成了所有这些测试数据,一切看起来不错。我将调试器日志放在下面,以显示测试数据库中填充了预期的内容。当我进入测试 test_correct_num_posts_generated
时,测试本身通过了,但是我得到了这个奇怪的数据库错误。我把完整的错误输出放在下面。我已经通过多次测试得到了这个。我听说这可能与 Django 错误有关,测试数据库没有被正确拆除。这是一个奇怪的问题,因为当我运行 python manage.py test cheers.test.ExploreTest
它通过并且 python manage.py test cheers.test.ExploreTest.test_correct_num_posts_generated
它通过,但是当我运行 python manage.py test
时,出现如下所示的错误。这是怎么回事?
测试.py
。 PostFactory
是一个虚拟数据生成器。
@classmethod
def setUpTestData(cls) -> None:
cls.num_posts = 45
cls.health_cate = 'Health'
cls.fitness_cate = 'Fitness'
cls.relationship_cate = 'Relationship'
cls.goal_categories_name_list = [cls.health_cate, cls.fitness_cate, cls.relationship_cate]
cls.user = create_test_user_in_DB()
cls.access_token = get_test_user_access_token()
for name in cls.goal_categories_name_list:
goal_category_obj = GoalCategory.objects.create(name=name, emoji='Some URL')
goal_obj = Goal.objects.create(creator=cls.user, goal_category=goal_category_obj)
if name == cls.relationship_cate:
cls.relationship_join_goal = JoinGoal.objects.create(joiner=cls.user, goal=goal_obj,
status=GoalStatus.ONGOING)
else:
JoinGoal.objects.create(joiner=cls.user, goal=goal_obj, status=GoalStatus.ONGOING)
for i in range(cls.num_posts):
PostFactory()
调试器在 setUpTestData
结束时打印出来。当我到达 test_correct_num_posts_generated
时,所有这些也会打印出来。 >>>
是我输入的行,下面是打印输出。
>>>User.objects.all()
<QuerySet [<User 6badb4b8-33ba-4bb9-aa9a-2e3afb359960>]>
>>>GoalCategory.objects.all()
<QuerySet [<GoalCategory: GoalCategory object (Health)>, <GoalCategory: GoalCategory object (Fitness)>, <GoalCategory: GoalCategory object (Relationship)>]>
>>>len(Post.objects.all())
45
>>>JoinGoal.objects.all()
<QuerySet [<JoinGoal e7c4e4fa-3592-4ad9-b93a-245694a5e384>, <JoinGoal 7d637523-67db-4c59-aea6-37a8b43f0dd3>, <JoinGoal cbb954b7-332e-47f4-82e6-d2c77d874be5>]>
Test.py
中的测试失败
def test_correct_num_posts_generated(self):
self.assertTrue(len(Post.objects.all()), self.num_posts)
self.assertTrue(len(Post.objects.all()), self.num_posts)
通过了,但是这个测试抛出了我提到的臭名昭著的错误:
======================================================================
ERROR: test_correct_num_posts_generated (cheers.test.ExploreTests.ExploreFeedTest.ExploreFeedTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "C:\ProgramData\Anaconda3\envs\cheers\lib\site-packages\django\db\backends\utils.py", line 82, in _execute
return self.cursor.execute(sql)
psycopg2.errors.ForeignKeyViolation: insert or update on table "cheers_post" violates foreign key constraint "cheers_post_join_goal_id_da1e6957_fk_cheers_joingoal_uuid"
DETAIL: Key (join_goal_id)=(5c05a7d2-ff3c-4f1e-95d9-277ae164dabb) is not present in table "cheers_joingoal".
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "C:\ProgramData\Anaconda3\envs\cheers\lib\site-packages\django\test\testcases.py", line 284, in _setup_and_call
self._post_teardown()
File "C:\ProgramData\Anaconda3\envs\cheers\lib\site-packages\django\test\testcases.py", line 1006, in _post_teardown
self._fixture_teardown()
File "C:\ProgramData\Anaconda3\envs\cheers\lib\site-packages\django\test\testcases.py", line 1248, in _fixture_teardown
connections[db_name].check_constraints()
File "C:\ProgramData\Anaconda3\envs\cheers\lib\site-packages\django\db\backends\postgresql\base.py", line 285, in check_constraints
cursor.execute('SET CONSTRAINTS ALL IMMEDIATE')
File "C:\ProgramData\Anaconda3\envs\cheers\lib\site-packages\django\db\backends\utils.py", line 66, in execute
return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
File "C:\ProgramData\Anaconda3\envs\cheers\lib\site-packages\django\db\backends\utils.py", line 75, in _execute_with_wrappers
return executor(sql, params, many, context)
File "C:\ProgramData\Anaconda3\envs\cheers\lib\site-packages\django\db\backends\utils.py", line 84, in _execute
return self.cursor.execute(sql, params)
File "C:\ProgramData\Anaconda3\envs\cheers\lib\site-packages\django\db\utils.py", line 90, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File "C:\ProgramData\Anaconda3\envs\cheers\lib\site-packages\django\db\backends\utils.py", line 82, in _execute
return self.cursor.execute(sql)
django.db.utils.IntegrityError: insert or update on table "cheers_post" violates foreign key constraint "cheers_post_join_goal_id_da1e6957_fk_cheers_joingoal_uuid"
DETAIL: Key (join_goal_id)=(5c05a7d2-ff3c-4f1e-95d9-277ae164dabb) is not present in table "cheers_joingoal".
最佳答案
由于测试在 test cheers.test.ExploreTest
上通过,但在 test
上没有通过,因此肯定有一些来自其他包的测试弄乱了数据。
不确定这是否会解决问题,但由于您使用的是 Django 3.2,因此 docs 中有一个小注释:
Changed in Django 3.2:
Objects assigned to class attributes in setUpTestData() must supportcreating deep copies with copy.deepcopy() in order to isolate themfrom alterations performed by each test methods. In previous versionsof Django these objects were reused and changes made to them werepersisted between test methods.
使用 copy.deepcopy()
复制模型实例没有按预期工作,需要额外的步骤来创建新实例。我在文档中的任何地方都找不到它,但我使用了 this answer 中的代码多次(它适用于带有 Postgres 的 Django 3.2):
from copy import deepcopy
old_obj = deepcopy(obj)
old_obj.id = None
old_obj.save()
如果是这种情况,我将使用 setUp
而不是 setUpTestData
,因为它会在每次测试之前重新创建测试数据库。
它速度较慢,您可能必须为某些测试更改特定数据,但它运行良好且更易于维护。
关于python - Django - 运行 "psycopg2.errors.ForeignKeyViolation: insert or update on table"时为 "python manage.py test",但运行单个测试时不是,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70239770/
命令 npm update 有什么区别和包裹npm-check-updates ?使用后者是否完全安全? 执行后好像是npm update并非所有软件包都已更新,因此似乎不完整。许多其他 popula
我有使用 ExpressJS 和 ORM Sequelize 的 API。我正在尝试使用 Sequelize 中的 update() 方法进行更新。默认情况下,it 方法将返回更新的行数。但我希望结果
关于如何更新 rubygems 有点困惑。过程不断变化(或者至少我从互联网上得到了相互矛盾的信息)。 $ gem outdated rubygems-update (1.8.10 < 1.8.11
我正在使用 webpack-dev-server处于开发模式( watch )。每次服务器重新加载时,一些 json 和 js 文件都会挤满我的构建目录,如下所示:'hash'.hot-update.
Mamp Pro 的当前版本是 5.04 (15996)。可用更新窗口显示“Mamp 5.0.0 > 5.1。更新失败,并显示一条消息:错误:无法验证更新。请确保您使用的是安全网络,然后重试。” 更新
我想在浏览量增加时更新时间戳“lastpageview_at”。我想我已经接近了,但我总是遇到语法错误,有人知道为什么或有其他解决方案吗? 我的触发器: CREATE TRIGGER Update_l
我正在执行 SELECT ... FOR UPDATE 以锁定一条记录,然后进行一些计算,然后进行实际的 UPDATE。我正在处理 InnoDB 数据库。 但是计算可能会以我不想执行 UPDATE 的
我需要在表更新时进行一些更新和插入以强制执行正确的数据。将 UPDATE 语句放入触发器中会导致某种“循环”吗? 谢谢! 最佳答案 更新触发器中的目标表将使触发器再次触发。 您可以使用 TRIGGER
这是我的布局 当我点击链接更新时,该链接应该打开和关闭renderComment bool
我有一个包含两件事的 Angular 范围: 一个包含 10k 行的巨型表格,需要一秒钟才能渲染 一些小的额外信息位于固定的覆盖标题栏中 根据您向下滚动页面/表格的距离,我必须更新标题中的小信息位之一
标题几乎已经说明了一切。 IF NEW.variance <> 0 THEN (kill update) END IF 这可能吗? 最佳答案 查看手册 (http://dev.mysql.com/do
我有几个表,我想强制执行版本控制,并且有一个生效日期和生效日期。每当应用程序或用户向该表写入更新时,我希望它重定向到两个全新的命令:更新目标记录,以便 EFFECTIVE_TO 日期填充当前日期和时间
我正在使用 Shopware,一件奇怪的事情让我抓狂 :( 所以我将首先解释问题是什么。 除了普通商品外,还有多种款式的商品,例如不同尺码的衬衫。这是 XS、S、M、L 和/或不同颜色的同一商品……但
寻求帮助制作 mysql 触发器。我当前的代码无法按预期工作。我想做的是,如果表A中的字段A被修改,则将字段A复制到表A中的字段B。 当前代码如下所示: BEGIN IF new.set_id=301
以下查询(来自此处Postgres SQL SELECT and UPDATE behaving differently) update fromemailaddress set call =
我想使用 D3 使用以下数据创建一个列表: var dataSet = [ { label: 'a', value: 10}, { label: 'b', value: 20},
哪个更好,先进行选择,然后进行更新。或者更确切地说,像这样合而为一: UPDATE items set status = 'NEW' where itemid in (1,2,3,
对于 eloquent model events,updating 和 updated 之间有什么区别? ? 我的猜测是 updating 在模型更新之前触发,而 updated 在模型更新之后触发。
我有一个对象数组(我们称之为arr)。在我的组件输入之一的 (change) 方法中,我修改了这些对象的属性之一,但在 View (*ngFor) 中没有任何变化。我读到 Angular2 变化检测不
我正在尝试使用 d3.js 构建水平日历时间线。主要目标是突出显示用户的假期和假期。 http://jsbin.com/ceperavu/2/edit?css,js,output 我首先从“开始”日期
我是一名优秀的程序员,十分优秀!