Тестирование в Django
Запуск всех тестов
python manage.py test project/ --keepdb
Как переопределить настройки?
from django.test import TestCase
class AnyTestCase(TestCase):
def test_call(self):
with self.settings(USE_TELEGRAM_BOT=True):
...
Как сгенерировать DRF-Request?
rest_framework.test.APIRequestFactory
возвращает джанговский WSGIRequest
, а хочется DRF-Request
from rest_framework.parsers import JSONParser
from rest_framework.request import Request
from rest_framework.test import APIRequestFactory
req_f = APIRequestFactory()
url: str
params: dict
raw_req = req_f.post(url, params, format='json')
req = Request(raw_req, parsers=[JSONParser()])
assert hasattr(req, 'data')
Работа со временем
Как получить текущее время с таймзоной?
from django.utils import timezone
timezone.now()
Как сделать дейттайм с таймзоной?
from django.utils import timezone
timezone.make_aware(dt.datetime(2022, 6, 5, 23, 59, 59, 999000))
Как парсить время?
from rest_framework.fields import DateTimeField
assert (
DateTimeField().run_validation('2022-06-05T23:59:59.999') ==
timezone.make_aware(dt.datetime(2022, 6, 5, 23, 59, 59, 999000))
)
Как сериализовать время?
from rest_framework.fields import DateTimeField
assert (
DateTimeField().to_representation(dt.datetime(2022, 6, 5, 23, 59, 59, 999000)) ==
'2022-06-05T23:59:59.999'
)
Как тестировать код, который пишет логи?
Использовать multi_db = True
:
class TestSendErisEmias(TestCase):
multi_db = True
pytest
pytest-django - pytest-плагин для Джанго
Конфиг
[pytest]
;Тестоывые настройки
DJANGO_SETTINGS_MODULE = root.test_settings
;Переиспользование бд, аналогично флагу keep-db
addopts = --reuse-db
Как тестить запросы?
@pytest.mark.django_db
def test_ok(client):
resp: HttpResponse = client.post(
'/api/...',
{
# json
},
content_type='application/json',
)
assert resp.status_code == 200