РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
777 of 818 menu

Класс RequestFactory

Класс RequestFactory применяется в тестах Django для создания объектов запроса, которые можно передавать в представления напрямую. Это позволяет тестировать логику представлений в изоляции, без необходимости запускать тестовый сервер и выполнять полноценные HTTP-запросы. Класс предоставляет методы для создания GET, POST, PUT, PATCH, DELETE запросов и других HTTP-методов.

Синтаксис

from django.test import RequestFactory factory = RequestFactory() request = factory.get(path, data=None, **extra) request = factory.post(path, data=None, content_type=None, **extra) request = factory.put(path, data=None, content_type=None, **extra) request = factory.patch(path, data=None, content_type=None, **extra) request = factory.delete(path, data=None, **extra)

Пример

Давайте создадим GET запрос к представлению, которое возвращает все статьи из базы данных:

from django.test import RequestFactory, TestCase from myapp.views import article_list from myapp.models import Article class ArticleViewTest(TestCase): def setUp(self): Article.objects.create(title="First article", status="published") Article.objects.create(title="Second article", status="draft") def test_article_list_view(self): factory = RequestFactory() request = factory.get("/articles/") response = article_list(request) self.assertEqual(response.status_code, 200) self.assertContains(response, "First article") self.assertNotContains(response, "Second article")

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

"Test passed successfully"

Пример

Создадим POST запрос для добавления новой статьи через представление, используя данные формы:

from django.test import RequestFactory, TestCase from myapp.views import create_article from myapp.models import Article class CreateArticleTest(TestCase): def test_create_article_post(self): factory = RequestFactory() data = { "title": "New article", "content": "Article content", "status": "published" } request = factory.post("/articles/create/", data) response = create_article(request) self.assertEqual(response.status_code, 302) self.assertEqual(Article.objects.count(), 1) article = Article.objects.first() self.assertEqual(article.title, "New article")

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

"Article created successfully"

Пример

Используем параметр content_type для отправки JSON данных в POST запросе:

import json from django.test import RequestFactory, TestCase from myapp.views import api_article class ApiArticleTest(TestCase): def test_api_post_json(self): factory = RequestFactory() json_data = json.dumps({ "title": "API article", "content": "JSON content" }) request = factory.post( "/api/articles/", json_data, content_type="application/json" ) response = api_article(request) self.assertEqual(response.status_code, 201) self.assertEqual(response.json()["title"], "API article")

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

{"id": 1, "title": "API article", "content": "JSON content"}

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

  • класс Client,
    который выполняет полноценные HTTP-запросы в тестах
  • метод RequestFactory.get,
    который создает GET-запрос для тестирования
  • метод RequestFactory.post,
    который создает POST-запрос для тестирования
  • класс TestCase,
    который предоставляет базовую функциональность для тестирования
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить