it-swarm.com.ru

как получить объект запроса в модульном тестировании Django?

У меня есть функция как

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

Теперь я хочу написать модульный тест для вышеуказанной функции отдельно (без вызова представления). Так как я должен назвать выше в TestCase. Можно ли создать запрос?

44
user1003121

Смотрите это решение :

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

Если вы используете тестовый клиент Django (from Django.test.client import Client), вы можете получить доступ к запросу из объекта ответа, например:

from Django.test.client import Client

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

или если вы используете Django.TestCase (from Django.test import TestCase, SimpleTestCase, TransactionTestCase), вы можете получить доступ к экземпляру клиента в любом тестовом примере, просто набрав self.client:

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

Используйте RequestFactory для создания фиктивного запроса.

11
Daniel Roseman

Вы можете использовать тестовый клиент 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

больше подробностей
https://docs.djangoproject.com/en/1.11/topics/testing/tools/#overview-and-a-quick-example

1
Sarath Ak

Вы имеете в виду def getEvents(request, eid) верно?

С Django unittest, вы можете использовать from Django.test.client import Client, чтобы сделать запрос.

Смотрите здесь: Тестовый клиент

Ответ @ Secator является префектом, поскольку он создает фиктивный объект, который действительно предпочтителен для действительно хорошего юнит-теста. Но в зависимости от вашей цели может быть проще использовать инструменты тестирования Django.

0
CppLearner