2015-08-27 1 views
1

Je n'ai rien trouvé jusqu'à présent.est-il possible de passer request.body via une demande de publication dans le client de test django?

https://docs.djangoproject.com/en/1.8/topics/testing/tools/#django.test.Client.options 

montre que les options autorisent request.body via get request mais ne trouvent aucun moyen de passer par une requête post. Toutes les idées, je cherchais depuis quelques heures maintenant.

+0

Je ne suis pas sûr de comprendre la question. Quelles données souhaitez-vous envoyer dans la demande de publication de test? – Alasdair

Répondre

-1

Le corps d'un POST est envoyé dans un dictionnaire comme second argument à TestClient.post:

class MyTestCase(TestCase): 

    def my_test_function(self): 
     response = self.client.post('/my-post-handler/', {'first': 'fred', 'last': 'dredd'}) 

     self.assertEqual(response.status_code, 200) 

Si cela ne fonctionne pas pour votre cas d'utilisation, vous voulez probablement sauter le TestClient tous ensemble et tester la fonction de vue directement. Pour ce faire, vous devez utiliser RequestFactory et l'envoyer en tant qu'argument de demande à la vue. Quelque chose comme ça, largement emprunté des documents que je Linked à:

from django.contrib.auth.models import AnonymousUser, User 
from django.test import TestCase 

from .views import my_view 

class SimpleTest(TestCase): 
    def setUp(self): 
     self.factory = RequestFactory() 

    def test_details(self): 
     request = self.factory.get('/customer/details') 

     # Recall that middleware are not supported. You can simulate a 
     # logged-in user by setting request.user manually. 
     request.user = self.user 

     # Set the body to whatever you need it to be 
     request.body = b'{"first": "fred", "last": "dredd"}' 

     # Test my_view() as if it were deployed at /customer/details 
     response = my_view(request) 
     self.assertEqual(response.status_code, 200) 
+1

essayer de définir '' 'request.body''' throws' '' AttributeError: ne peut pas définir attribute''' – biodiv

+0

Essayé de définir le corps, ne fonctionne pas, throws AttributteError! – luistm

1

Si vous voulez vraiment faire:

request.body = b'{"first": "fred", "last": "dredd"}' 

Vous devriez le faire comme ceci:

request._body = b'{"first": "fred", "last": "dredd"}' 
2

Oui:

self.client.generic('POST', '/url', 'raw post data')