【问题标题】:How can I test a view with a form in Django?如何在 Django 中使用表单测试视图?
【发布时间】:2015-08-31 16:55:12
【问题描述】:

我正在 Django 中创建一个应用程序,但我遇到了下一个问题:我想在 Django 中为一个视图编写一个测试,但是该视图从 html 接收一个表单,我不知道如何模拟发送表单以测试该视图。

我的观点是下一个:

class EnsaioaBilatuViewTest(TestCase):

def test_ensaioa_bilatu_view(self):

    self.client.login(username='admin', password='admin')

    response = self.client.post('/url/', {'attr1':'2015-01-01', 'attr2':''})

    self.assertEquals(response.status_code, 302)

    self.assertEquals(response.context['value'], 0)

我得到的错误是下一个:

 self.assertEquals(response.context['value'], 0)
 eError: 'NoneType' object has no attribute '__getitem__'

这是怎么发生的?

【问题讨论】:

  • 您的问题是什么?如何在测试中将数据发送到视图? testing documentation 很好地解释了这一切。
  • 为了更好的理解我改了帖子
  • 302 是重定向,它没有上下文。
  • 为什么会重定向?
  • 因为这是您在成功 POST 后所做的,所以您重定向到另一个页面。

标签: python django forms testing view


【解决方案1】:

要测试视图,请提供 HTML 表单发回的数据,然后在响应中声明某些内容:

response = self.client.post(reverse('select_self'), 
    {u'form-0-id':[u'1'],
     u'form-0-username': [u'thomas6'],
     u'form-0-class_choice': [u'1'],  
     u'form-1-id':[u'4'],
     u'form-1-username': [u'thomas6'], 
     u'form-1-class_choice': [u'10'], 
     u'form-TOTAL_FORMS': [u'2'], 
     u'form-INITIAL_FORMS': [u'2'], 
                                                        })
self.assertEqual(response.status_code, 302)

【讨论】:

  • 为了更好的理解我改了帖子
猜你喜欢
  • 2015-11-06
  • 2018-05-10
  • 1970-01-01
  • 2020-04-15
  • 1970-01-01
  • 2017-01-21
  • 1970-01-01
  • 2016-12-16
  • 2017-09-16
相关资源
最近更新 更多