检查ValidationError实际上是我在测试中期望的那个

时间:2017-09-03 13:21:16

标签: django testing

我有一个测试,它创建一个Django对象“忘记”设置一个字段。它应该失败,所以我检查:

p = Person.objects.create(name='test') 
self.assertRaises(ValidationError, p.full_clean)

遗忘的字段是birth_date,所以如果我拦截了异常并打印出来,那么错误就是:

{'birth_date': ['This field cannot be blank.']}` 

现在我向Person添加了另一个字段,也不应该留空。现在的错误是:

{'birth_date': ['This field cannot be blank.'], 'category': ['This field cannot be blank.']}

使用上面的代码,我默默地压制这两个错误。我需要测试代码是否会引发特定的验证错误。有没有好办法呢?现在我有了这个解决方法:

try:
    p.full_clean()
except ValidationError as e:
    self.assertIn('birth_date', dict(e))
    self.assertEqual(len(dict(e).keys()), 1, msg="Expected one error, found more")

但是如果'birth_date'可能存在两个不同的错误,那么这也会遇到。

有更好的方法吗?

0 个答案:

没有答案