当前位置: 首页 > 知识库问答 >
问题:

Django测试客户端不会自动序列化工厂

祁嘉木
2023-03-14

这是我的代码:

# models.py
class MyModel(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    name = models.CharField(max_length=10)
    ...

# views.py
def get_all_models(request):
    return JsonResponse({"models": list(MyModel.objects.all())})

# urls.py
path('/mypath', views.get_all_models, name='get_all_models'),

如果我访问/mypath,此代码可以正常工作。但是,当我使用Django的测试客户端运行自动测试时,我会收到这个错误:

*** TypeError: Object of type MyModel is not JSON serializable

这是我的测试:从django.测试导入测试用例,客户端从博客.测试.工厂.用户导入用户工厂从 blog.tests.factories.post 导入后工厂

class MyModelTest(TestCase):
    def setUp(self):
        self.user = UserFactory.create()
        self.post = MyModelFactory.create(user=self.user)
        self.client = Client()

    def test_get_all_models(self):
        response = self.client.get("/mypath")
        pass

我怀疑这与我的工厂有关:

import factory
from .models import User, MyModel

class UserFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = User

    username = factory.Faker('word')
    email = factory.Faker('email')

class MyModelFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = MyModel

    user = factory.SubFactory(UserFactory)
    name = factory.Faker('name')

如何使我的工厂可序列化?

注意:此问题不是重复的。链接的其他问题具有返回 HttpResponse 对象(而不是 JsonResponse 对象)的视图处理程序。这种区别是我的问题的关键,因为我看到的错误与 JSON 序列化有关,而 JSON 序列化应该由 JsonResponse 类来解决。

此外,其他问题不涉及工厂。工厂是我尝试做的另一个关键组成部分,即针对工厂生成的数据运行集成测试。

共有2个答案

蔚琦
2023-03-14

这个呢

def get_all_models(request):
    return JsonResponse({"models": list(MyModel.objects.all().values())},safe=False)

要点是:

MyModel.objects.all().values()
safe=False
万坚壁
2023-03-14

您共享的代码假设< code>JSONResponse将序列化一个ORM对象,但是根据Django文档,它不会:

https://docs.djangoproject.com/en/3.0/ref/request-response/#jsonresponse-物体

https://docs . django project . com/en/3.0/topics/serialization/# djangojsonencoder

如果在将Django ORM对象传递到JSONResponse之前对其进行序列化,它将起作用

考虑执行以下操作:

from django.core import serializers
data = serializers.serialize("json", MyModel.objects.all())

https://docs.djangoproject.com/en/3.0/topics/serialization/

django-rest框架是一个非常流行的库,用于像你共享的场景 https://docs.djangoproject.com/en/3.0/topics/serialization/#djangojsonencoder

 类似资料:
  • 客户端测试更多关心客户端方面的代码执行情况,通常是web浏览器或者浏览器插件。区别于服务器端,代码在客户端执行并直接返回随后的结果。 下列文章描述了如何进行客户端的web应用测试: 基于DOM跨站脚本测试 (OTG-CLIENT-001) JavaScript脚本执行测试 (OTG-CLIENT-002) HTML注入测试 (OTG-CLIENT-003) 客户端URL重定向测试 (OTG-CLI

  • 我使用带有WebFlux的Spring boot 2.0.1作为Rest服务器。 在我RestController我想自动反序列化一个对象(产品)。但是我得到一个杰克逊错误,好像参数名称模块没有注册。 原因:com.fasterxml.jackson.databind.exc.Invalid定义异常:无法构建的实例(没有像默认构造一样的Creator):无法从对象值(没有基于委托或属性的Creat

  • 英文原文:http://emberjs.com/guides/testing/test-runners/ 当运行测试时,可以在很多种不同的方案里选取最适合工作流的方案。找到一种摩擦最低的运行测试的方案非常重要,因为测试是一项经常要做的事情。 浏览器 运行测试的最简单的方法是直接在浏览器中打开页面。下面将展示如何加入一个qunit的测试harness给应用,并可以针对其运行测试: 首先,从这里获取一

  • 有多种工具可用于执行应用程序的安全性测试。很少有工具可以执行端到端安全测试,而有些工具专门用于发现系统中的特定类型的缺陷。 开源工具 一些开源安全测试工具如下 - 编号 工具名称 描述/简介 网站/网址 1 Zed Attack Proxy 提供自动扫描仪和其他工具,以发现安全漏洞。 https://www.owasp.org 2 OWASP WebScarab 使用Java开发,用于分析Http

  • 自动化测试 如果你想构建可靠的高质量的软件,自动化测试将是你工具箱里面非常关键的一个部分,它帮助你减少手工测试的代价,提高你的开发小组重构已有代码的能力。 自动化测试的类型  并非所有的自动化测试都是相似的,他们通常在作用域、实现方式和执行时间上有所差异,我把他们分成三种类型的测试:单元测试、集成测试和功能测试。 单元测试用于测试你代码的最小单元,在基于java的项目中这个单元就是一个方法(met

  • 传统的接口自动化测试成本高,大量的项目没有使用自动化测试保证接口的质量,仅仅依靠手动测试,是非常不可靠和容易出错的。 YApi 为了解决这个问题,开发了可视化接口自动化测试功能,只需要配置每个接口的入参和对 RESPONSE 断言,即可实现对接口的自动化测试,大大提升了接口测试的效率。 第一步,测试集合 使用 YApi 自动化测试,第一步需要做得是创建测试集合和导入接口,点击添加集合创建,创建完成