Метод get класса RequestFactory
Метод get класса RequestFactory предназначен
для создания объектов HttpRequest с методом GET.
Он применяется в тестах для имитации GET-запросов к
представлениям без запуска полноценного сервера.
Метод принимает путь к представлению и дополнительные
параметры: данные запроса (QUERY_STRING), заголовки,
данные сессии и другие настройки.
Синтаксис
from django.test import RequestFactory
factory = RequestFactory()
request = factory.get(path, data=None, **extra)
Параметры метода:
-
path- URL-путь к представлению (обязательный параметр) -
data- словарь параметров GET-запроса (необязательный) -
extra- дополнительные параметры (заголовки, формат данных, etc.)
Пример
Создадим простой GET-запрос без параметров:
from django.test import RequestFactory
from myapp.views import article_list
factory = RequestFactory()
request = factory.get('/articles/')
response = article_list(request)
print(response.status_code)
Результат выполнения кода:
"200"
Пример
Создадим GET-запрос с параметрами в QUERY_STRING:
from django.test import RequestFactory
from myapp.views import article_list
factory = RequestFactory()
request = factory.get('/articles/', {'category': 'tech', 'page': 2})
response = article_list(request)
print(request.GET.get('category'))
print(request.GET.get('page'))
Результат выполнения кода:
"tech"
"2"
Пример
Создадим GET-запрос с дополнительными заголовками:
from django.test import RequestFactory
from myapp.views import article_detail
factory = RequestFactory()
request = factory.get(
'/articles/1/',
HTTP_USER_AGENT='Mozilla/5.0',
HTTP_ACCEPT='application/json'
)
response = article_detail(request, pk=1)
print(request.headers.get('User-Agent'))
print(request.headers.get('Accept'))
Результат выполнения кода:
"Mozilla/5.0"
"application/json"
Пример
Используем метод для тестирования представления с аутентификацией:
from django.test import RequestFactory, TestCase
from django.contrib.auth.models import User
from myapp.views import profile_view
class ProfileViewTest(TestCase):
def setUp(self):
self.factory = RequestFactory()
self.user = User.objects.create_user(
username='testuser',
password='testpass'
)
def test_profile_view_with_authenticated_user(self):
request = self.factory.get('/profile/')
request.user = self.user
response = profile_view(request)
self.assertEqual(response.status_code, 200)
Результат выполнения кода:
"Тест пройден успешно"
Пример
Создадим GET-запрос с данными в формате JSON:
from django.test import RequestFactory
from myapp.views import api_articles
import json
factory = RequestFactory()
request = factory.get(
'/api/articles/',
{'format': 'json'},
content_type='application/json'
)
response = api_articles(request)
data = json.loads(response.content)
print(data.get('count'))
Результат выполнения кода:
"10"
Смотрите также
-
класс
RequestFactory,
который используется для создания тестовых запросов -
метод
post,
который создает POST-запросы в тестах -
класс
Client,
который имитирует браузер для тестирования -
класс
TestCase,
который предоставляет среду для написания тестов