DRF + DREST:如何确保在测试过程中使用setUp测试数据编译序列化程序?

时间:2018-11-12 14:41:11

标签: django django-rest-framework dynamic-rest

使用

  • Django:1.11
  • Python 3.6
  • DRF:3.7
  • DREST(又名动态休息):1.8

我有一个这样写的序列化器:

class SubProjectAsFKWithAttachedFieldsSerializer(DynamicModelSerializer):
    # attached_fields = AttachedFieldSerializer(embed=True, many=True)
    try:
        scope_object = UgField.objects.get(dotted_path='global.scope')
        scopes = DynamicRelationField(
            AttachedFieldWithDirectValuesSerializer,
            source='attached_fields',
            many=True,
            embed=True,
            read_only=True,
            queryset=AttachedField.objects.filter(ug_field=scope_object)
        )
    except ObjectDoesNotExist:
        scopes = DynamicRelationField(AttachedFieldWithDirectValuesSerializer,
                                      source='attached_fields',
                                      many=True,
                                      read_only=True,
                                      embed=True)

当前,在setUp方法中几乎所有我的tests.py中,我都有

self.global_scope_field = UgFieldFactory(dotted_path='global.scope', name='Scope')

出于某些原因,此行

scope_object = UgField.objects.get(dotted_path='global.scope')

尽管我已使用DjangoModelFactory“实例化”,但保持失败的原因

我应该做些什么来确保在运行测试时该行始终通过?

更新

  1. 只需指出,我实际上有一个UgField记录,该记录具有字符串global.scope作为字段dotted_path的值。
  2. 只有当我运行python manage.py test时,我才会遇到此问题。
  3. 当我正确运行该应用程序时,没有问题。

我也尝试设置

(self.global_scope_field, created) = UgField.objects.get_or_create(dotted_path='global.scope', name='Scope')

使用我的setUp方法。

但是我遇到了同样的问题

enter image description here

1 个答案:

答案 0 :(得分:0)

要使用.get()检索对象,必须将其保存。

self.global_scope_field = UgFieldFactory(dotted_path='global.scope', name='Scope')
self.global_scope_field.is_valid()
self.global_scope_field.save()

或者,您可以只创建没有表单的对象。

self.global_scope_field = UgField.objects.create(dotted_path='global.scope', name='Scope')