Django Test Utils

django-test-utils предоставляет дополнительные утилиты для улучшения тестирования Django приложений.

Установка

1# Установка пакета
2pip install django-test-utils
1# Или через Poetry
2poetry add django-test-utils

Использование

 1from django_test_utils import TestCase
 2from django.contrib.auth.models import User
 3
 4class UserTestCase(TestCase):
 5    def test_user_creation(self):
 6        user = User.objects.create_user('test', 'test@example.com')
 7        self.assertIsNotNone(user.id)
 8
 9    def test_login_required_view(self):
10        response = self.client.get('/protected/')
11        self.assertRedirects(response, '/login/?next=/protected/')

Дополнительные assert методы

 1class MyTestCase(TestCase):
 2    def test_response_contains(self):
 3        response = self.client.get('/books/')
 4        self.assertContains(response, 'Book List')
 5        self.assertNotContains(response, 'Private Content')
 6
 7    def test_template_used(self):
 8        response = self.client.get('/books/')
 9        self.assertTemplateUsed(response, 'books/list.html')
10        self.assertTemplateNotUsed(response, 'admin/base.html')
11
12    def test_form_errors(self):
13        response = self.client.post('/books/create/', {})
14        self.assertFormError(response, 'form', 'title', 'This field is required.')

Тестирование API

 1from rest_framework.test import APITestCase
 2
 3class BookAPITestCase(APITestCase):
 4    def setUp(self):
 5        self.user = User.objects.create_user('test', 'test@example.com')
 6        self.client.force_authenticate(user=self.user)
 7
 8    def test_create_book(self):
 9        data = {'title': 'Test Book', 'author': 'Test Author'}
10        response = self.client.post('/api/books/', data)
11        self.assertEqual(response.status_code, 201)
12        self.assertEqual(Book.objects.count(), 1)

FAQ

Q: Как тестировать API endpoints?
A: Используй APITestCase из Django REST Framework.

Q: Можно ли тестировать асинхронные views?
A: Да, используй async/await синтаксис в тестах.