Django测试和ContentType通用关联夹具

时间:2014-03-21 15:33:58

标签: django django-testing django-fixtures django-tests

如何在Django单元测试中使用GenericRelations?

我已阅读并尝试过无数的互联网建议无济于事。

这个很有希望Problems with contenttypes when loading a fixture in Django

但Django 1.6中不再出现“reset”命令

我的项目使用GenericForeign键进行ContentType,使用外键进行auth.Users。我使用--natural选项仅为我的应用程序转储数据,但这会导致测试数据库中不存在用户的问题。现在我删除了--natural选项,而是转储了所有3个应用程序myApp,auth,contenttypes的数据。当我运行测试时,我得到“无法加载contenttypes.ContentType(pk = 50):列app_label,模型不是唯一的”。我认为这是由于在导入模型时动态创建了contenttypes。

使用的命令:

python manage.py dumpdata auth myApp contenttypes --natural --indent=4 > auhtmtmnatural.json

接下来我转储了myApp,auth离开了contenttypes。我认为,由于ContentTypes app db是动态创建的,而我的灯具有自然键,这应该可行。它没有。

现在我得到了:

DeserializationError: Problem installing fixture 'auhtmtmnatural.json': ContentType matching query does not exist.

如何使用contetypes进行修复工作?在测试中使用设置和创建对象是否更好?

2 个答案:

答案 0 :(得分:4)

使用content_type: [<app_label>, <model>],代替content_type: <hard-coded pk of model>

答案 1 :(得分:-4)

为什么你不应该使用灯具有几个原因:

  • 它很慢
  • 很难更新/维护;
  • 不练习;

你应该使用&#34; mock&#34;而不是灯具。像工厂男孩的应用程序:

http://factoryboy.readthedocs.org/en/latest/

https://pypi.python.org/pypi/factory_boy/