python - Django:如何对更新 View /表单进行单元测试

标签 python django forms unit-testing

我正在尝试对我的更新表单和 View 进行单元测试。我正在为我的创建和更新表单使用 Django Crispy Forms。 UpdateForm 继承了 CreateForm 并对提交按钮文本做了一个小改动。 CreateView 和 UpdateView 非常相似。它们具有相同的模型、模板和 success_url。它们的区别在于使用了各自的形式,CreateView继承了django.views.generic.CreateView,UpdateView继承了django.views.generic.edit.UpdateView。

该网站运行良好。我可以毫无问题地创建和编辑对象。但是,下面显示的我的第二个测试失败了。如何测试我的 UpdateForm?

如有任何帮助,我们将不胜感激。谢谢。

此测试通过:

class CreateFormTest(TestCase):

    def setUp(self):
        self.valid_data = {
            'x': 'foo',
            'y': 'bar',
        }

    def test_create_form_valid(self):
        """ Test CreateForm with valid data """
        form = CreateForm(data=self.valid_data)
        self.assertTrue(form.is_valid())
        obj = form.save()
        self.assertEqual(obj.x, self.valid_data['x'])

这个测试失败了:

class UpdateFormTest(TestCase):
    def setUp(self):
        self.obj = Factories.create_obj()  # Creates the object

    def test_update_form_valid(self):
        """ Test UpdateForm with valid data """
        valid_data = model_to_dict(self.obj)
        valid_data['x'] = 'new'
        form = UpdateForm(valid_data)
        self.assertTrue(form.is_valid())
        case = form.save()
        self.assertEqual(case.defendant, self.valid_data['defendant']

最佳答案

当使用已创建的对象预填充 ModelForm 时,您可以使用 instance 关键字参数将对象传递给表单。

form = SomeForm(instance=my_obj)

这可以在测试中完成,例如在 OP< 中或在 View 中编辑已创建的对象。当调用 save() 时,现有对象将更新而不是创建新对象。

关于python - Django:如何对更新 View /表单进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38859266/

相关文章:

python - 如何从事件窗口中检索选定的文本

python - 我有一个带有两个独立离散变量的高斯函数。如何创建所有可能值的矩阵?

django - 在 django 表单中水平对齐单选按钮

javascript - 窗体的 "action"和 "onsubmit": Which executes first?

python - 通过API调用xbacklight

python - conftest.py 可以_read_ pytest.ini 中的现有值吗?

Python Django - "AUTH_USER_MODEL refers to model ' %s' 尚未安装”% settings.AUTH_USER_MODEL

django - 根据 Django 中另一个相关模型的 M2M 关系过滤相关字段

javascript - 在其他表单中提交特定的动态生成表单

c# - 在 asp.net mvc razor 中使用 JQuery 范围 slider