如何单元测试Django管理内联表单

时间:2016-11-29 04:08:24

标签: python django django-admin django-unittest

如何使用Django的unittesting客户端填写内联表单?

在我的测试中,我尝试过:

response = client.get('/admin/myapp/prospect/add/')
initial = response.context['adminform'].form.initial
initial['name'] = 'Jon Doe'
response = client.post('/admin/myapp/prospect/add/', initial, follow=True)

但是这会抛出“ManagementForm数据丢失”错误,因为我的ModelAdmin有一些内联表单,form.initial对象似乎不包含这些内联的样板字段,如*-INITIAL_FORMS*-MAX_NUM_FORMS*-TOTAL_FORMS

有没有解决方法,或者Django的unittest框架不支持测试内联表单?

1 个答案:

答案 0 :(得分:0)

  1. 修改应用程序的管理内联以包括其他字段。这样,您将获得更多:

    from myapp.admin import MyModelAdmin   
    
    def test_my_test_function():
    
        MyModelAdmin.inlines[0].extra = 5
    
        # Rest of test procedure follows
    
  2. 使用硒。这样,您可以模拟整个浏览器体验,但需要花费更长的测试时间。您将需要单击“添加新的内联”链接,我无法以一种很好的方式单击该链接,而最终使用了非常长的xpath。

  3. 模拟在Python客户端中添加新内联的最佳方法可能是在您选择的Django Web测试客户端中克隆字段,就像Django在客户端那样做,然后允许它们在服务器端一样。我想这将需要在编写此答案时编写一些新代码。