【问题标题】:Testing Form In Django With A User Object使用用户对象在 Django 中测试表单
【发布时间】:2018-03-25 15:26:50
【问题描述】:

我正在进行测试 - 我有一个小表格,在 clean 方法中包含大量逻辑。

我的测试如下所示:

class DependentFormTest(TestCase):

    def test_dependent_form_birthdate_out_of_range(self):
        form_data = {
            'first_name': 'Bill',
            'last_name': 'Robusin',
            'birth_date': '10/12/1801',
            'gender': 'Male',
            'relationship': 'dependent',
            'street_address_1': '123 Any lane',
            'city': 'Billson',
            'state': 'WA',
            'zip': '50133',
        }
        form = DependentForm(data=form_data)
        self.assertFalse(form.is_valid())

在我的 clean 方法中,我可以访问一些有关当前用户的信息。失败的 sn-p 如下所示:

user_benefit = Benefit.objects.get(user=self.user)

这一行是导致我的测试出错并出现以下错误的原因:

Benefit matching query does not exist

这是真的,因为在测试中“用户”是“无”。

如何在我的测试中设置用户以便我可以测试此表单的有效性?

【问题讨论】:

    标签: python django unit-testing testing django-forms


    【解决方案1】:

    在您的测试setUp() 方法中,您可以创建一个用于测试目的的用户。然后重复使用它。

    据我了解,您的用户来自请求。因此,您需要使用 django 测试客户端登录并将数据发布到您的表单中。

    【讨论】:

      【解决方案2】:

      如果在表单初始化期间未明确设置用户,则无法在表单的 clean 方法中访问用户(请参阅此处:django: how to access current request user in ModelForm?

      如果您在表单初始化期间将用户传递给构造函数,您也可以在测试中这样做。

      user = User.objects.first() # probably you should think about a better way to obtain a user instance
      form = DependentForm(data=form_data, user=user)
      self.assertFalse(form.is_valid())
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-20
        • 1970-01-01
        • 2016-07-07
        • 2011-01-29
        • 1970-01-01
        • 2020-07-04
        • 2023-03-05
        • 2017-01-21
        相关资源
        最近更新 更多