Skip to content

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

Как переопределить настройки?

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'
)

pytest

pytest-django - pytest-плагин для Джанго

Конфиг

[pytest]
;Тестоывые настройки
DJANGO_SETTINGS_MODULE = root.test_settings
;Переиспользование бд, аналогично флагу keep-db
addopts = --reuse-db