Метод get класса RequestFactory

Метод get класса RequestFactory предназначен для создания объектов HttpRequest с методом GET. Он применяется в тестах для имитации GET-запросов к представлениям без запуска полноценного сервера. Метод принимает путь к представлению и дополнительные параметры: данные запроса (QUERY_STRING), заголовки, данные сессии и другие настройки.

Синтаксис

pythonfrom django.test import RequestFactory

factory = RequestFactory()
request = factory.get(path, data=None, **extra)

Параметры метода:

Пример

Создадим простой GET-запрос без параметров:

pythonfrom django.test import RequestFactory
from myapp.views import article_list

factory = RequestFactory()
request = factory.get('/articles/')
response = article_list(request)
print(response.status_code)

Результат выполнения кода:

python"200"

Пример

Создадим GET-запрос с параметрами в QUERY_STRING:

pythonfrom 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'))

Результат выполнения кода:

python"tech"
"2"

Пример

Создадим GET-запрос с дополнительными заголовками:

pythonfrom 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'))

Результат выполнения кода:

python"Mozilla/5.0"
"application/json"

Пример

Используем метод для тестирования представления с аутентификацией:

pythonfrom 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)

Результат выполнения кода:

python"Тест пройден успешно"

Пример

Создадим GET-запрос с данными в формате JSON:

pythonfrom 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'))

Результат выполнения кода:

python"10"

Смотрите также

  • класс RequestFactory,
    который используется для создания тестовых запросов
  • метод post,
    который создает POST-запросы в тестах
  • класс Client,
    который имитирует браузер для тестирования
  • класс TestCase,
    который предоставляет среду для написания тестов