python - 测试模型序列化器

标签 python django django-rest-framework

我正在尝试学习测试序列化器的最佳方法,但遇到了一些问题。在下面的示例中,我正在测试创建新用户是否正常工作。即可以对密码进行哈希处理。我收到的错误是:

TypeError: create() missing 1 required positional argument: 'validated_data'

我不太确定我需要传递什么作为 validated_data

序列化器.py

class UserSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = User
        fields = ('url', 'username', 'email', 'password')
        extra_kwargs = {
            'url': {'view_name': 'user-detail'},
            'password': {'write_only': True}
        }

    def create(self, validated_data):
        user = User.objects.create_user(
            username=validated_data['username'],
            email=validated_data['email'])

        user.set_password(validated_data['password'])
        user.save()

        return user

    def update(self, instance, validated_data):
        user = User.objects.get(id=instance.id)
        user.set_password(validated_data['password'])
        user.save()

        return user

测试.py

class UserSerializerTest(APITestCase):
    def setUp(self):

        factory = APIRequestFactory()

        request = factory.get(path=reverse('user-list'))

        self.serializer_context = {
            'request': Request(request),
        }

    def test_create_user(self):
        from .serializers import UserSerializer

        data = {'username': 'temp_usr', 'email': 'temp@email.com',
                'password': 'temp_pass'}

        user = UserSerializer(data=data, context=self.serializer_context).create()

最佳答案

您在测试中调用了create。您应该调用 is_valid,然后保存

user = UserSerializer(data=data, context=self.serializer_context)
user.is_valid(raise_exception=True)
user.save()

关于python - 测试模型序列化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39180100/

相关文章:

python - 将函数结果传递到 Django 中的 html

javascript - 用于显示实时消息控制台的 Django(Dajax/Jquery?)插件

python - 覆盖 Django Rest Framework 中的 unique_together 错误消息

graph.style.rect 的 Python Pyx : color. 渐变

python - 我如何正确使用网址总是显示导入错误

django - 使用 Django 分享到社交页面

python - Django 框架中未使用值(在范围内未使用)

django - 使用 Django Rest Framework 和 Angular 从 API 端点发送电子邮件

以内存高效方式聚合对象属性的 Pythonic 方式?

python - Django 中的全局小数舍入选项