2017-09-27 1 views
2

Django 테스트 클라이언트에서 POST 요청을 제출하여 폼 데이터를 포함시킬 수 있습니까? 특히, 나는 (How should I write tests for Forms in Django?에서 영감) 같은 것을하고 싶은 :Django 테스트 POST 요청을 사용하여 폼을 제출하는 클라이언트

from django.tests import TestCase 

class MyTests(TestCase): 
    def test_forms(self): 
     response = self.client.post("/my/form/", {'something':'something'}) 

의 엔드 포인트/내/형태는 '뭔가'를 다루는 일부 내부 논리를 가지고있다. 문제는 나중에 request.POST.get ('something')에 액세스하려고 할 때 아무것도 얻을 수 없다는 것입니다. 아래에서 공유 할 수있는 솔루션을 찾았습니다.

답변

2

핵심은 content_type을 클라이언트의 post 메소드에 추가하고 데이터를 urlencode하는 것이 었습니다.

from urllib import urlencode 

... 

data = urlencode({"something": "something"}) 
response = self.client.post("/my/form/", data, content_type="application/x-www-form-urlencoded") 

희망이 있으면 도움이 될 것입니다.

+1

게시물 데이터를 urlencode하거나 콘텐츠 유형을 설정하지 않아도됩니다. ['client.post()'] (https://docs.djangoproject.com/en/1.11/topics/testing/tools/#django.test.Client.post)의 문서에있는 예제는'response = 귀하의 질문에 대한 self.client.post ("/ my/form /", { 'something': 'something'})'가 작동해야합니다. 아마도 당신의 질문에서 당신이 뭔가를 놓친 이유가 그것이 작동하지 않는 이유를 설명 할 것입니다. – Alasdair

관련 문제