Атрибут client
Атрибут client доступен в каждом тестовом классе, наследующем от TestCase. Он представляет собой экземпляр тестового клиента Django, который позволяет отправлять GET, POST, PUT, DELETE и другие запросы к вашему приложению, проверять полученные ответы и состояние сессии. Клиент автоматически создаётся для каждого тестового метода и не требует явной инициализации.
Синтаксис
class MyTestCase(TestCase):
def test_example(self):
response = self.client.get('/some-url/')
# или
response = self.client.post('/submit/', data={'key': 'value'})
Пример . GET-запрос
Давайте проверим, что главная страница доступна и возвращает статус код 200:
from django.test import TestCase
class HomePageTest(TestCase):
def test_home_page_status_code(self):
response = self.client.get('/')
self.assertEqual(response.status_code, 200)
Результат выполнения кода:
"Test passed successfully"
Пример . POST-запрос
Отправим данные формы через POST и проверим, что после отправки происходит перенаправление:
from django.test import TestCase
class ContactFormTest(TestCase):
def test_form_submission(self):
response = self.client.post('/contact/', data={
'name': 'John',
'email': 'john@example.com',
'message': 'Hello!'
})
self.assertEqual(response.status_code, 302)
Результат выполнения кода:
"Test passed successfully"
Пример . Работа с сессией
Через атрибут client можно обращаться к сессии и проверять её содержимое:
from django.test import TestCase
class SessionTest(TestCase):
def test_session_value(self):
session = self.client.session
session['user_id'] = 123
session.save()
response = self.client.get('/profile/')
self.assertEqual(response.context['user_id'], 123)
Пример . Авторизация через клиент
Атрибут client позволяет легко авторизовать пользователя с помощью метода force_login:
from django.test import TestCase
from django.contrib.auth.models import User
class AuthTest(TestCase):
def test_authenticated_user(self):
user = User.objects.create_user(username='testuser', password='12345')
self.client.force_login(user)
response = self.client.get('/dashboard/')
self.assertContains(response, 'Welcome, testuser')
Результат выполнения кода:
"Test passed successfully"
Смотрите также
-
класс
Client,
который используется для отправки HTTP-запросов в тестах -
метод
get,
который выполняет GET-запрос через клиент -
метод
post,
который выполняет POST-запрос через клиент -
метод
force_login,
который принудительно авторизует пользователя