2016-08-09 4 views
3

Я пытаюсь выполнить модульное тестирование моих форм и представлений. Я использую Django Crispy Forms для обеих форм создания и обновления. UpdateForm наследует CreateForm и делает небольшое изменение в тексте кнопки отправки. CreateView и UpdateView очень похожи. Они имеют одну и ту же модель, шаблон и success_url. Они отличаются тем, что они используют свои соответствующие формы, а CreateView наследует django.views.generic.CreateView, а UpdateView наследует django.views.generic.edit.UpdateView.Django: Как выполнить модульный тест Обновить виды/формы

Сайт работает нормально. Я могу создать и отредактировать объект без проблем. Однако мой второй тест, показанный ниже, терпит неудачу. Как проверить свой UpdateForm?

Любая помощь будет оценена по достоинству. Благодарю.

Этот тест проходит:

class CreateFormTest(TestCase): 

    def setUp(self): 
     self.valid_data = { 
      'x': 'foo', 
      'y': 'bar', 
     } 

    def test_create_form_valid(self): 
     """ Test CreateForm with valid data """ 
     form = CreateForm(data=self.valid_data) 
     self.assertTrue(form.is_valid()) 
     obj = form.save() 
     self.assertEqual(obj.x, self.valid_data['x']) 

Этот тест не:

class UpdateFormTest(TestCase): 
    def setUp(self): 
     self.obj = Factories.create_obj() # Creates the object 

    def test_update_form_valid(self): 
     """ Test UpdateForm with valid data """ 
     valid_data = model_to_dict(self.obj) 
     valid_data['x'] = 'new' 
     form = UpdateForm(valid_data) 
     self.assertTrue(form.is_valid()) 
     case = form.save() 
     self.assertEqual(case.defendant, self.valid_data['defendant'] 
+2

Я уверен, что вы ищете 'form = UpdateForm (instance = self.obj)' – IanAuld

+0

Это сделало трюк. Спасибо! Если вы дадите ответ, я приму его. – Eric

ответ

3

Когда предварительно заселять ModelForm с объектом, который уже был создан вы можете использовать аргумент instance ключевое слово, чтобы передать объект к форме.

form = SomeForm(instance=my_obj) 

Это может быть сделано в тесте, например, в OP < или в целях редактирования объекта, который уже был создан. При вызове save() существующий объект будет обновляться вместо создания нового.

+0

Это несвязанная форма. Вызов 'is_valid' на нем вернет' False' без ошибок. – surfer190

Смежные вопросы