Django表单需要请求,使测试更难?

时间:2016-06-05 15:14:29

标签: django forms testing request kwargs

我有许多django表格,我将请求作为kwarg传递。
我刚开始深入测试,似乎需要请求作为参数的测试表单使测试更加困难。因为我必须以某种方式创建一个请求,我不能在没有它的情况下测试我的表单。

那么最好是避免将请求传递给表单吗?还是另一种解决方法? 我在第一时间这样做的原因是有时我需要request.user或request.session并根据表单中的信息进行一些清理/设置。

更新
这是一个示例形式:

class OrderForm(forms.ModelForm):
   def __init__(self, *args, **kwargs):
      self.request = kwargs.pop('request')
      self.user = self.request.user

   def clean(self):
       # Here I have some cross session-field validation
       if self.request.session['has_response'] and self.cleaned_data('status') == 'NEW':
            raise ValidationError()

   def save(self, commit=False):
      self.instance.user = self.user
      return super(OrderForm, self).save(commit=True)

   class Meta:
      model = Order
      fields = ('address', 'city', 'status', ) # more fields

视图代码很简单:

form = OrderForm(request.POST, request=request)

Order模型还有一个带有一些验证逻辑的clean()方法。 在用户登录期间,会话最多填充。 我需要会话/用户。

但最重要的是,问题 - 将请求和会话传递给表单是不是一个糟糕的设计,考虑测试此表单的选项?当表单保存对象时,我发现它更合乎逻辑,包括request.user。但也许我应该尝试在表单和视图之间进行拆分?

1 个答案:

答案 0 :(得分:1)

如果您需要在menubar方法中将请求传递给表单。您可以在这样的测试中使用请求/会话/用户:

clean()

应该大致了解你可以做什么,而不是专门测试。