У меня есть одна форма django, где поле выбора заполняется из базы данных.
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())
Теперь проблема в том, что при запускеtest, приложение загружается в первую очередь перед инициализацией db, следовательно, setUpClass
для модульного теста не вызывается, а CLASS_CHOICE
остается пустым, а проверка формы становится неудачной.Как можно избежать этого или повторно инициализировать поле выбора после создания одной записи в таблице Class
.