2015-01-01 2 views
0

Django에서 ChoiceField 양식을 테스트하려고 시도했습니다. Django Form ChoiceField를 테스트하는 방법

나는 하나의 ChoiceFieldForm 있습니다

[('Bronze', 'Bronze ($10.00 per month)'), 
('Silver', 'Silver ($20.00 per month)')] 

나는 다음과 같은 방법으로 테스트하려고 :

class PickPlanForm(forms.Form): 
    "Set the `plan` session cookie for choice here." 

    plan_choices = Plan.objects.get_choices() 

    # Field 
    plan = forms.ChoiceField(required=True, choices=plan_choices) 

이 내 plan_choices의 튜플 목록입니다

response = self.client.post(reverse('payment:register_step3'), 
    {'plan': 'Bronze'}, follow=True) 
self.assertRedirects(response, reverse('payment:register_step4')) 

그러나 테스트를 실행할 때 나는 내가 사용하고

Traceback (most recent call last): 
    File "/Users/aaron/Documents/djcode/textress_concierge/textress/main/tests/test_views.py", line 170, in test_register_step3 
    self.assertRedirects(response, reverse('payment:register_step4')) 
    File "/Users/aaron/Documents/virtualenvs/textress/lib/python3.4/site-packages/django/test/testcases.py", line 263, in assertRedirects 
    (response.status_code, status_code)) 
AssertionError: False is not True : Response didn't redirect as expected: Response code was 200 (expected 302) 

:

Django 1.6.8 
Python 3.4 

나는 이것이 내가 놓친 것을 쉽게 뭔가 생각하고 있어요 EP 오류 추적을 받고? 추가보기보기에

from django.views.generic import FormView 
from braces.views import LoginRequiredMixin 

class PickPlanView(LoginRequiredMixin, FormView): 
    """ 
    Step #3 of Registration 

    Pick a Plan, and save the Plan as a `session cookie` before creating 
    the Stipe Customer/Subscription using the Plan Choice. 
    """ 
    template_name = 'main/hotel_form.html' 
    form_class = PickPlanForm 
    success_url = reverse_lazy('payment:register_step4') 
    authenticated_redirect_url = settings.VERIFY_LOGOUT_URL 

    def get_form_kwargs(self): 
     """Add the `request` Obj to Form, so I can set the PlanPick as a 
      session cookie for the time being.""" 
     kwargs = super().get_form_kwargs() 
     kwargs['request'] = self.request 
     return kwargs 

참고 :

그냥 양식 선택을 받아

편집 감사합니다.

수동으로 테스트 할 때 작동합니다.

이전에 ChoiceField을 테스트하지 않았기 때문에 Django ChoiceField Test 부분에 문제가 있습니다.

내가 잘못된 선택을 게시 할 경우

+2

보기가 보이지 않으면 테스트가 실패한 이유를 알기가 정말 어렵습니다. – Brandon

+0

정확히 어떻게''payment : register_step4''로 리다이렉트합니까? 리디렉션은''payment : register_step3''의 POST 핸들러에서 발생합니까? – sthzg

+0

@Brandon 내보기를 추가했습니다. 도와 줘서 고마워. 저에게 알려주세요. 기본적으로 수동으로 테스트 할 때 ChoiceField Test 구문 오류이거나 잘못된 {{choice ':'value '}'조합이라고 생각하게됩니다. 감사합니다 –

답변

1

나는 정확히 같은 방식으로 실패하는 테스트를 가져올 수 감사합니다. 게시 브론즈 테스트 통과하지만 form 클래스에 하드 코드 된 선택 항목이 있고 데이터베이스에서 동적으로 가져올 수 없습니다.

단위 테스트의 데이터베이스 (또는 조롱 된 queryset)에 계획이있어 Plan.objects.get_choices()에서 올바르게 가져 오면 내게 생각하게합니까?