我有两个直接相关的问题。
Django documentation建议使用代码
引发ValidationError# Good
ValidationError(_('Invalid value'), code='invalid')
# Bad
ValidationError(_('Invalid value'))
如何在测试中访问此代码?我尝试在捕获的异常中使用as_data
,as_json
或简单.code
的尝试都失败了。不幸的是,我看到的建议都与表单验证有关。我的测试验证了模型。
这与问before几乎是同一个问题(我不使用表格)。
相关问题:上面链接的相同文档页面提供了一些如何引发ValidationError的示例,以及#34; Raising ValidationError"部分建议使用代码,"在实践中使用验证"从来没有提到它,那里的例子不使用代码。我想知道这是否表明这个功能是陈旧的。
答案 0 :(得分:1)
我学会了如何在PyCharm中调试Django测试,它帮助我找到了解决方案。为了别人的缘故:
错误代码可通过exception.error_dict[field_name][err_no].code
访问。例如,以下检查引发了一个非常具体的错误:
def test_negative_photo_number(self):
"""Cannot create photo with negative photo number"""
with self.assertRaises(ValidationError) as ve_context:
self.create_photo(album_number=1, photo_number=-2)
e = ve_context.exception
print(e.error_dict)
self.assertEqual(len(e.error_dict.keys()), 1, 'Encountered more than one problematic field')
self.assertEqual(len(e.error_dict['number']), 1, 'Encountered more than one error')
self.assertEqual(e.error_dict['number'][0].code, 'min_value')
对于在字段验证器外部引发的ValidationError(例如,通过model.clean方法),将字段名称(上面的“数字”)替换为__all__
。