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?
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)
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
Utilisez RequestFactory
pour créer une demande fictive.
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
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.