2016-08-09 2 views
3

업데이트 양식 및 뷰를 단위 테스트하려고합니다. Django Crispy Forms를 Create와 Update 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

이미 당신이를 통과하는 instance 키워드 인수를 사용하여 생성 된 개체와 ModelForm을 미리 채울 경우 양식에 개체.

form = SomeForm(instance=my_obj) 

는 영업 <에서 또는 이미 생성 된 개체를 편집 할 수있는보기에서 테스트에서 수행 할 수 있습니다. save()을 호출하면 기존 개체가 새 개체를 만드는 대신 업데이트됩니다.

+0

언 바운드 형식입니다. 'is_valid'를 호출하면 오류없이'False'가 반환됩니다. – surfer190