2012-04-23 1 views
36

У меня есть функция, какКак получить объект запроса в тестировании модуля django?

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

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

ответ

64

См this 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) 
+4

Этот код фактически был включен в Django, начиная с версии 1.3. См. [Документация] (https://docs.djangoproject.com/en/1.4/topics/testing/#django.test.client.RequestFactory) здесь. –

+1

Если я вижу это правильно, этот поддельный запрос с завода не фильтруется через промежуточное (-е) ПО. –

+3

Обновленная документация [link] (https://docs.djangoproject.com/en/1.9/topics/testing/advanced/#example) – dragonx

0

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

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

Смотрите здесь: Test Client

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

11

Используйте RequestFactory, чтобы создать фиктивный запрос.

+1

Спасибо за ссылку на документ –

13

Если вы используете тест Джанго клиента (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) вы можете получить доступ к экземпляру клиента в любом TestCase просто набрав self.client:

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

 Смежные вопросы

  • Нет связанных вопросов^_^