【发布时间】:2015-05-27 10:10:40
【问题描述】:
我使用 Django 1.7.7 和 python 2.7.6 和 Postgres 作为数据库,我遇到了TransactionTestCase 的问题。在我的迁移中,我有两个 datamigrations,我希望它们在测试期间可用,因此我将 serialized_rollback = True 添加到我的测试用例 (https://docs.djangoproject.com/en/1.7/topics/testing/overview/#test-case-serialized-rollback)。
测试用例的第一次测试没问题,但随后 django 抱怨 IntegrityError:
IntegrityError: duplicate key value violates unique constraint "django_content_type_app_label_6032a1f08b99c274_uniq"
DETAIL: Key (app_label, model)=(admin, logentry) already exists.
我设法通过在我的设置中添加以下内容 (https://docs.djangoproject.com/en/1.7/ref/settings/#std:setting-TEST_NON_SERIALIZED_APPS) 来运行测试并避免此错误:
TEST_NON_SERIALIZED_APPS = ['django.contrib.contenttypes',
'django.contrib.auth']
但我想知道为什么需要这样做?这是回滚中的错误还是我这边的问题?
【问题讨论】:
-
您刚刚帮助我解决了 TransactionTestCase 测试中的一个非常大的问题。直到现在我才听说过 TEST_NON_SERIALIZED_APPS。谢谢。我认为这是因为 TransactionTestCase 似乎坏了。我的代码适用于 1.7.2,它在没有 TEST_NON_SERIALIZED_APPS 的情况下在 1.7.8 上停止。我(慢慢地)转向 py.test,我不知何故相信 pytest-django 固定装置会帮助我。最终。我对你的问题的回答?我认为你做的一切都很好,Django 1.7 ATM 需要整个体操。
-
我同意,这是一问一答。非常感谢!我不确定为什么 Django 默认不序列化这些应用程序,因为在我的情况下,如果没有按照您的建议设置 TEST_NON_SERIALIZED_APPS,它就无法工作。
标签: python django postgresql testcase django-testing