webentwicklung-frage-antwort-db.com.de

wie bekomme ich ein Request-Objekt in Django-Unit-Tests?

Ich habe eine Funktion als

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

Nun möchte ich den Unit-Test für die obige Funktion separat schreiben (ohne die Ansicht aufzurufen). Wie soll ich das oben in TestCase nennen. Kann ich eine Anfrage erstellen?

44
user1003121

Siehe diese Lösung :

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

Wenn Sie den Django-Testclient (from Django.test.client import Client) verwenden, können Sie über das Antwortobjekt wie folgt auf die Anforderung zugreifen:

from Django.test.client import Client

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

wenn Sie Django.TestCase (from Django.test import TestCase, SimpleTestCase, TransactionTestCase) verwenden, können Sie in jedem Testfall auf die Clientinstanz zugreifen, indem Sie einfach self.client eingeben:

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

Verwenden Sie RequestFactory , um eine Dummy-Anforderung zu erstellen.

11
Daniel Roseman

Sie können den Django-Testclient verwenden 

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

für mehr Details
https://docs.djangoproject.com/de/1.11/topics/testing/tools/#overview-and-a-quick-example

1
Sarath Ak

Du meinst def getEvents(request, eid) richtig?

Mit Django können Sie den from Django.test.client import Client verwenden, um eine Anfrage zu stellen.

Siehe hier: Test Client

Die Antwort von @ Secator ist Präfekt, da sie ein Mock-Objekt erstellt, das wirklich für einen wirklich guten Einzelgänger bevorzugt wird. Abhängig von Ihrem Zweck kann es jedoch einfacher sein, die Test-Tools von Django zu verwenden.

0
CppLearner