python - 如何在 Django REST Framework 中测试 ValidationError 消息?
问题描述
在尝试测试传递给Serializer的数据时,我不仅要测试错误消息本身,还要测试ValidationError
错误消息本身。我目前使用它的方式检查 中的字段名称serializer.errors
,但我正在寻找测试"Reformat your question please."
. 这样做的干净方法是什么?
测试.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)
序列化程序.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)
解决方案
您可以使用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).
推荐阅读
- ansible - vars_prompt 无法正常工作 - Ansible
- listview - 如何在 Flutter 中制作自定义列表视图
- python - 如何修复错误 - TypeError: unsupported operand type(s) for -: 'tuple' and 'int'
- eclipse - 如何在 Eclipse 中为我的自定义透视图添加调试项到工具栏?
- python - sys.getrefcount 返回不同范围的非连续值
- uwp - 如何修复 GetPreviewFrameAsync 中的内存泄漏
- python - Django_select2:如何使用请求数据过滤 ModelSelect2Widget 查询集?(Django_tables2 + Django_filter +Django_select2 )
- angular6 - 如何在 Angular 6 中创建反应性问题选项表单(数据来自服务)
- web3 - 如何接收待处理的交易哈希?
- node.js - Cloud Build for Google App Engine - 灵活失败,出现通用“退出状态 1”