【问题标题】:Testing ModelSerializers测试模型序列化器
【发布时间】:2016-08-27 10:29:43
【问题描述】:

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

TypeError: create() 缺少 1 个必需的位置参数: '验证数据'

我不太确定我需要作为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

tests.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()

【问题讨论】:

  • 因为方法定义需要它:)。您测试序列化程序本身而不是整个创建视图是否有特定原因?

标签: python django django-rest-framework


【解决方案1】:

您在测试中调用了create。您应该拨打is_valid,然后拨打save

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

【讨论】:

    猜你喜欢
    • 2018-06-18
    • 1970-01-01
    • 2018-01-30
    • 1970-01-01
    • 2018-09-01
    • 2018-07-05
    • 2019-03-19
    • 1970-01-01
    • 2011-06-14
    相关资源
    最近更新 更多