测试何时引发ValidationError

时间:2018-09-24 05:57:16

标签: django python-2.7 testing validationerror

我是编程和Django的新手。我正在尝试测试我的功能之一,以确保引发验证错误。测试确认出现了错误,但也表示测试失败。这怎么可能?

value       price   <br>
101       25  <br>
102       35   <br>
103       45  <br>

models.py我如何导入

value       Price   <br>
101          5%  <br>
102         6%   <br>
103         7%  <br>

1 个答案:

答案 0 :(得分:1)

我们需要查看更多代码(尤其是create_question()以及check_user_words与信号的连接方式),但是我认为问题在于您使用的是{{1} }信号处理程序以执行post_save

如果是这种情况,则您的测试失败的原因是check_user_words()将触发create_question()信号,并且post_save将立即执行-即check_user_words()上下文之前,因此您的测试失败。

如果是这种情况,请尝试以下操作:

with self.assertRaises

现在该测试应该通过,因为一旦您尝试创建问题,就会引发验证错误。

但是请注意,在某些情况下尝试保存对象时,在信号中执行此操作将导致未捕获的异常。根据您的用例,最好在模型本身(see docs here)的def test_check_user_words(self): with self.assertRaises(ValidationError): create_question(question_text="What a minute bucko", days=1) 方法中执行此操作,因为这将导致在模型表单等上报告适当的错误:< / p>

clean()

(然后放下信号处理程序)。然后,您可以使用以下方法进行测试:

def clean(self):
    for field in instance._meta.get_fields():    
        if (isinstance(field, models.CharField) and contains_bad_words(getattr(instance, field.attname))):
            raise ValidationError("We don't use words like '{}' around here!".format(getattr(instance, field.attname)))