Как проверяется сообщение ValidationError в Django REST Framework? - PullRequest
1 голос
/ 26 мая 2020

При попытке проверить данные, которые передаются в сериализатор , я хочу проверить не только ValidationError, но и само сообщение об ошибке. В настоящее время он проверяет имя поля в serializer.errors, но я хочу проверить "Reformat your question please.". Каким будет чистый способ сделать это?

tests.py


class TestQuestionSerializer(TestCase):
    '''Verify that when an invalid question is 
    submitted that a validation error is raised'''

    @classmethod
    def setUpTestData(cls):
        cls.client_data = {
            "invalid": {
                "title": "Can I post a question?"
            },
            "valid": {
                "title": "How can I post a question?"
            }
        }

    def test_question_serializer_fail(self):
        with self.assertRaises(ValidationError) as e:
            serializer = QuestionSerializer(data=self.client_data['invalid'])
            serializer.is_valid(raise_exception=True)
        self.assertIn("title", serializer.errors)

serializers.py

class QuestionSerializer(serializers.Serializer):
    title = serializers.CharField(max_length=50)

    def validate_title(self, value):
        regex = r"^[What|When|Where|How|Why]"
        match = re.search(regex, value)
        if not match:
            raise serializers.ValidationError("Reformat your question please.")
        return value


    def create(self, validated_data):
        return Question.objects.create(**validated_data)

1 Ответ

1 голос
/ 26 мая 2020

Вы можете использовать assertRaisesMessage. Ваш тест будет выглядеть так, тогда

def test_question_serializer_fail(self):
    with self.assertRaisesMessage(ValidationError, "Reformat your question please."):
        serializer = QuestionSerializer(data=self.client_data['invalid'])
        serializer.is_valid(raise_exception=True).
...