Сессия Django в тестах

Всем привет! Я не могу понять, как работают сессии в Django.
У меня есть магазин, корзина анонимного пользователя привязана к session_key.
Ключ сессии берется из объекта запроса.

def _check_session(self, request) -> int | str:
        session_key = getattr(request.session, ‘session_key’, None)
        if session_key:
            return session_key
        else:
            request.session.create()
            return request.session.session_key

Я пишу тесты, один тест добавляет товары в корзину, я беру анонимного пользователя-клиента и делаю post-запрос на добавление, все в порядке.
Затем во втором тесте, я беру того же анонимного клиента, делаю get запрос, чтобы получить содержимое корзины.
Но в этом запросе объект запроса не имеет ключа session_key.
Почему во втором тесте объект запроса не содержит session_key? Клиент тот же самый.
Эти два теста написаны в рамках одного TestCase.

Данные сессии хранятся в базе данных. База данных очищается между тестами. Поэтому вам нужно объединить два теста в один, чтобы то, что было записано первым, было доступно для чтения вторым.

Вы можете найти подтесты полезными. Это не предполагаемый вариант использования, но подтесты ведут себя так же, как и отдельные тесты, за исключением того, что база данных не очищается между подтестами. См. документацию unittest.subTest.

Это должно работать (с моей точки зрения)

class Tests( TestCase):

    def Test1( self):

        # run a sequence of subTests with the database contents accumulating
        # until the end of this test

        for subtest in ('method1', 'method2', ...):
            with self.subTest( subtest):
                getattr( self, subtest) ()

    def method1( self):  # NB name NOT starting with test!
        ...
Вернуться на верх