Django Test Utils
django-test-utils предоставляет дополнительные утилиты для улучшения тестирования Django приложений.
Установка
Использование
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 синтаксис в тестах.