Django REST框架 - 用于单元测试的伪对象

时间:2016-08-05 18:04:49

标签: python django unit-testing django-rest-framework

我正在为我的Django应用程序编写单元测试。目前我正在使用factory_boy制作虚假对象进行测试。这适用于我的大多数测试,但我遇到以下问题:我的factory_boy对象没有显示在{model}.objects 中。例如,我尝试在序列化程序中测试以下方法:

def get_can_edit(self, obj):
    request = self.context.get('request')
    user = request.user
    admin = SimpleLazyObject(obj.admin)
    user = User.objects.get(username=request.user)
    return user == obj.admin

使用调试器完成它,我已经确定request.user正确拥有我的假用户,但User.objects没有我的假用户。

我想知道是否有一个简单的替代factory_boy,它实际上会将我的假对象添加到{model}.objects,或者我是否只是错误地使用factory_boy?或者也许有一种完全不同的方法......谁知道呢。

以下是代码:

The serializer

The test

1 个答案:

答案 0 :(得分:2)

您需要继承Factory而不是UserFactory 基类,以便将对象保存到数据库中。

来自DjangoModelFactory

  

Django Model 的所有工厂都应使用DjangoModelFactory   基类。

class UserFactory(factory.DjangoModelFactory): # use DjangoModelFactory base class

    class Meta: 
        model = models.User