【发布时间】:2018-10-20 10:39:43
【问题描述】:
我有一个 django 表单,其中一个选择字段是从 db 中填充的。
class TestForm(forms.Form):
CLASS_CHOICE = []
classes = Class.objects.filter(std__gte=4)
for cls in classes:
CLASS_CHOICE.append((cls.code,
"{} - {}".format(cls.code,cls.std)))
name = forms.CharField()
class = forms.ChoiceField(choices = CLASS_CHOICE)
def _post_clean(self):
# some validation
pass
将其单元测试编写为:
class SampleTest(TestCase):
@classmethod
def setUpClass(cls):
super(SampleTest, cls).setUpClass()
cls.class = Class.objects.create(std=10,code='A')
def test_valid_form(self):
post_data = {'name':'testing',
'class':'A' }
f = TestForm(data=post_data)
self.assertTrue(f.is_valid())
现在的问题是,在运行测试时,应用程序在初始化 db 之前首先加载,因此单元测试的 setUpClass 没有被调用,CLASS_CHOICE 保持空白并且表单验证失败。在Class 表中创建一个条目后,如何避免这种情况或重新初始化选择字段。
【问题讨论】:
标签: django unit-testing django-forms