如何模拟django表单的实例属性

How to mock instance attribute of django form

我正在做一个单元测试,我正在模拟一个 Django 表单,但我遇到了一些麻烦,因为我需要从表单中模拟两件事:

我在视图中使用表单,像这样导入它:

from profiles.forms import PaymentForm

而且我尝试了以下方法来模拟它:

    @patch('profiles.forms.PaymentForm')
    def test_when_processing_a_payment_then_the_event_is_tracked(self, payment_form_class):
        payment_form_class.is_valid.return_value = True
        payment_form_class.cleaned_data = {'token': 1}

这个方法不行,is_valid returns false.

    @patch('profiles.forms.PaymentForm')
    def test_when_processing_a_payment_then_the_event_is_tracked(self, payment_form_class):
        payment_form_class.return_value.is_valid = True
        payment_form_class.return_value.cleaned_data = {'token': 1}

这两者都不是。

我正在使用 Django 和单元测试。我已经使用我们代码库的辅助函数成功地模拟了 is_valid,但它似乎不适用于实例属性。知道如何解决这个问题吗?

您可能需要在视图中使用表单的地方模拟表单,因为在模拟运行之前它已经导入到那里。

所以像这样:

@patch('my_app.my_views.PaymentForm')