【问题标题】:Django REST Framework - Fake objects for unit testsDjango REST Framework - 用于单元测试的假对象
【发布时间】:2016-12-12 05:35:17
【问题描述】:

我正在为我的 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

【问题讨论】:

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


【解决方案1】:

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

来自factory_boy docs:

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

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

    class Meta: 
        model = models.User

【讨论】:

  • 非常感谢!做到了。
猜你喜欢
  • 2018-05-14
  • 2016-07-07
  • 1970-01-01
  • 1970-01-01
  • 2020-08-04
  • 2015-01-27
  • 2016-09-07
  • 1970-01-01
  • 2014-09-14
相关资源
最近更新 更多