【问题标题】:How to test DRF serializer when using additional keyword arguments?使用附加关键字参数时如何测试 DRF 序列化程序?
【发布时间】:2018-12-19 00:46:22
【问题描述】:

我有一个简单的模型和一个序列化程序,它使用额外的关键字参数(extra_kwargs)来限制字段的最大值和最小值。我想在我的 tests.py 中编写两个测试用例来测试该字段(权重)的有效值和无效值。我该怎么做? 我正在使用 Python 2.7。

型号

from django.db import models

class Person(models.Model):
    name = models.CharField(max_length=100)
    weight = models.FloatField()

序列化器

from rest_framework import serializers
from .models import Person

class PersonSerializer(serializers.ModelSerializer):
    model = Person
    fields = ('name', 'weight')
    extra_kwargs = {'weight': {'min_value': 5, 'max_value': 1000}}

tests.py

from django.test import TestCase
from .models import Person

class ModelTestCase(TestCase):
    def setUp(self):
        self.person = Person(name='Sam', weight=150)

    def test_when_weight_isValid(self):
        #e.g. when weight = 200

    def test_when_weight_notValid(self):
        #e.g. when weight = 3

【问题讨论】:

    标签: django python-2.7 django-rest-framework python-unittest


    【解决方案1】:
    import json
    
    from django.urls import reverse
    from django.contrib.auth import authenticate
    from rest_framework import status
    from rest_framework.test import APITestCase
    
    from .models import *
    
    
    class UserTests(APITestCase):
        def setUp(self):
            self.person = Person(name='Sam', weight=150)
    
        def test_when_weight_isvalid(self):
            url = reverse('person-detail', kwargs={'pk': self.person.id})
            data = {'weight': 200}
            response = self.client.patch(url, data, format='json')
            self.assertEqual(response.status_code, status.HTTP_200_OK)
            print json.dumps(response.data, ensure_ascii=False, indent=2)
    

    类似这样,代码是未经测试的。

    【讨论】:

    • 我想知道如何在不使用请求和响应的情况下对其进行测试。有没有办法在不导入“APITestCase”和导入“TestCase”的情况下做到这一点?
    • 首先它不是,它不是一个真正的请求,你可以在没有服务器的情况下运行测试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-09
    • 1970-01-01
    相关资源
    最近更新 更多