Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我应该如何用Django编写表单测试?_Python_Django_Django Testing - Fatal编程技术网

Python 我应该如何用Django编写表单测试?

Python 我应该如何用Django编写表单测试?,python,django,django-testing,Python,Django,Django Testing,在编写测试时,我希望模拟对Django中视图的请求。这主要是为了测试表单。下面是一个简单测试请求的片段: from django.tests import TestCase class MyTests(TestCase): def test_forms(self): response = self.client.post("/my/form/", {'something':'something'}) self.assertEqual(response.s

在编写测试时,我希望模拟对Django中视图的请求。这主要是为了测试表单。下面是一个简单测试请求的片段:

from django.tests import TestCase

class MyTests(TestCase):
    def test_forms(self):
        response = self.client.post("/my/form/", {'something':'something'})
        self.assertEqual(response.status_code, 200) # we get our page back with an error

无论是否存在表单错误,页面总是返回200的响应。如何检查我的表单是否失败,以及特定字段(
soemthing
)是否有错误?

2011年的原始答案是

self.assertContains(response, "Invalid message here", 1, 200)
但我现在看到(2018年):

  • AssertRaiseMessage
  • assertFieldOutput
  • assertFormError
  • assertFormsetError

请随意选择。

我认为如果您只是想测试表单,那么您应该只测试表单,而不是测试呈现表单的视图。获得想法的示例:

from django.test import TestCase
from myapp.forms import MyForm

class MyTests(TestCase):
    def test_forms(self):
        form_data = {'something': 'something'}
        form = MyForm(data=form_data)
        self.assertTrue(form.is_valid())
        ... # other tests relating forms, for example checking the form data


其中“form”是表单的上下文变量名,“something”是字段名,“This field is required.”是预期验证错误的确切文本。

+1。单元测试的思想是分别测试每个单元。@Daniel但是集成测试更有用,更容易发现bug。@wobbily_col在集成测试中发现什么是真正的bug也需要更多的时间。在单元测试中,它更明显。我认为要获得良好的测试覆盖率,您无论如何都需要两者。这就是检查特定表单错误的方法:
self.assertEquals(form.errors['recipient'],[u“收件人无效”])
self.assertEqual(form.is\u valid(),True)
可以简化为:
self.assertTrue(form.is\u valid())
这给我带来了一个AttitButeError:AttributeError:“SafeUnicode”对象对于新手用户没有属性“errors”:事先创建一个用户,并使用
self.client.force\u login(self.user)
作为测试方法的第一行。我对此帖子有问题(),然后我发现我必须将它作为多部分发送,如下所示:response=self.client.post(“/form url/”,data={'name':'test123','category':1,'note':'note123'},content\u type=django.test.client.multipart\u content),如果在保存表单时遇到空实例的问题,然后检查从浏览器发送的请求
from django.tests import TestCase

class MyTests(TestCase):
    def test_forms(self):
        response = self.client.post("/my/form/", {'something':'something'})
        self.assertFormError(response, 'form', 'something', 'This field is required.')