web-dev-qa-db-fra.com

comment obtenir un objet de requête dans les tests unitaires Django?

J'ai une fonction de

def getEvents(eid, request):
    ......

Maintenant, je veux écrire un test unitaire pour la fonction ci-dessus séparément (sans appeler la vue). Alors, comment devrais-je appeler ce qui précède dans TestCase. Est-il possible de créer une demande?

44
user1003121

Voir cette solution :

from Django.utils import unittest
from Django.test.client import RequestFactory

class SimpleTest(unittest.TestCase):
    def setUp(self):
        # Every test needs access to the request factory.
        self.factory = RequestFactory()

    def test_details(self):
        # Create an instance of a GET request.
        request = self.factory.get('/customer/details')

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

Si vous utilisez le client de test Django (from Django.test.client import Client), vous pouvez accéder à la requête depuis l'objet réponse comme ceci:

from Django.test.client import Client

client = Client()
response = client.get(some_url)
request = response.wsgi_request

ou si vous utilisez Django.TestCase (from Django.test import TestCase, SimpleTestCase, TransactionTestCase), vous pouvez accéder à une instance cliente dans n’importe quel testcase en tapant simplement self.client:

response = self.client.get(some_url)
request = response.wsgi_request
22
Anton Manevskiy

Utilisez RequestFactory pour créer une demande fictive.

11
Daniel Roseman

Vous pouvez utiliser le client de test Django 

from Django.test import Client
c = Client()
response = c.post('/login/', {'username': 'john', 'password': 'smith'})
response.status_code
response = c.get('/customer/details/')
response.content

pour plus de détails
https://docs.djangoproject.com/fr/1.11/topics/testing/tools/#overview-and-a-quick-example

1
Sarath Ak

Vous voulez dire def getEvents(request, eid) right?

Avec Django unittest, vous pouvez utiliser le from Django.test.client import Client pour faire une demande.

Voir ici: Test Client

La réponse de @ Secator est préfète, car elle crée un objet fantaisie qui est vraiment préféré pour un très bon paresseux. Mais selon votre objectif, il pourrait être plus simple d'utiliser les outils de test de Django.

0
CppLearner