Django测试和ContentType通用关系固定装置

use*_*929 5 django django-testing django-fixtures django-tests

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

我已经阅读并尝试了无数互联网上的建议,但无济于事。

这是在Django中加载固定装置时很有希望的Contenttypes问题

但是Django 1.6中不再存在“重置”命令

我的项目将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
Run Code Online (Sandbox Code Playgroud)

接下来,我转储了myApp,保留了内容类型的身份验证。我认为,由于ContentTypes应用程序数据库是动态创建的,而且我的装置具有自然键,因此应该可以使用。没有。

现在我得到:

DeserializationError: Problem installing fixture 'auhtmtmnatural.json': ContentType matching query does not exist.
Run Code Online (Sandbox Code Playgroud)

如何获得具有原型的Fixutres?在测试中使用安装程序和创建对象更好吗?

roh*_*wal 5

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


Lar*_*ara -3

不应该使用固定装置的原因有以下几个:

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

您应该使用像工厂男孩这样的“模拟”应用程序,而不是固定装置:

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

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