【发布时间】:2016-05-03 19:21:48
【问题描述】:
我无法从django_nose.FastFixtureTestCase 转移到django.test.TestCase(甚至更保守的django.test.TransactionTestCase)。我正在使用 Django 1.7.11,并且正在针对 Postgres 9.2 进行测试。
我有一个Testcase 类,可以加载三个夹具文件。该类包含两个测试。如果我将每个测试单独运行为单次运行 (manage test test_file:TestClass.test_name),它们都可以工作。如果我一起运行它们,(manage test test_file:TestClass),我会得到
IntegrityError: Problem installing fixture '<path>/data.json': Could not load <app>.<Model>(pk=1): duplicate key value violates unique constraint "<app_model_field>_49810fc21046d2e2_uniq"
在我看来,数据库实际上并没有在测试之间被刷新或回滚,因为它只在我单次运行测试时发生。
我已经单步执行了 Django 代码,看起来它们正在被刷新或回滚——这取决于我是在尝试TestCase 还是TransactionTestCase。
(因为https://github.com/django-nose/django-nose/issues/220,我要离开FastFixtureTestCase)
我还应该看什么?这似乎应该是一件简单的事情,并且在 django.test.TestCase 和 Django.test.TransactionTestCase 的设计范围内。
编辑:
测试类或多或少看起来像这样:
class MyTest(django.test.TransactionTestCase): # or django.test.TestCase
fixtures = ['data1.json', 'data2.json', 'data3.json']
def test1(self):
return # I simplified it to just this for now.
def test2(self):
return # I simplified it to just this for now.
更新:
我已经通过一次测试成功地重现了这几次,所以我怀疑夹具加载代码中存在某些问题。
【问题讨论】:
-
您确定您拥有的唯一字段在灯具中没有重复吗?
-
鉴于测试是独立进行的,我敢肯定。它们最近也已从开发数据库中转储/创建。
-
你是如何加载灯具的?可以发一下测试课吗?
-
请展示可以重现问题的夹具和测试。
-
我无法以目前的形式进行分享,因为数据和结构不是我要分享的。我可以尝试在我的应用程序中重现此问题,但我希望找到其中的根本原因 - 希望有一些明显的错误是常见问题。
标签: django django-testing django-nose