问题:我应该如何在Django中编写有关Forms的测试?
在编写测试时,我想在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
)是否存在错误?
回答 0
我认为,如果您只想测试表单,则应该只测试表单,而不是测试呈现表单的视图。举例说明:
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
回答 1
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.')
其中“ form”是表单的上下文变量名称,“ something”是字段名称,而“此字段是必需的”。是预期验证错误的确切文本。
回答 2
2011年的原始答案是
self.assertContains(response, "Invalid message here", 1, 200)
但是我现在看到(2018)有大量适用的断言可用:
- assertRaisesMessage
- assertFieldOutput
- assertFormError
- assertFormsetError
随便你吧。