116

当我编写测试时,我想在 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) 是否有错误?

4

3 回答 3

264

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

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
于 2011-09-05T06:50:23.130 回答
82

https://docs.djangoproject.com/en/stable/topics/testing/tools/#django.test.SimpleTestCase.assertFormError

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”是字段名称,“This field is required”。是预期验证错误的确切文本。

于 2011-09-05T20:19:51.257 回答
19

2011 年的原始答案是

self.assertContains(response, "Invalid message here", 1, 200)

但我现在看到(2018 年)有一大堆适用的断言可用

  • assertRaisesMessage
  • 断言字段输出
  • 断言表单错误
  • 断言表单集错误

任你选。

于 2011-09-05T06:18:07.640 回答