Сессия 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!
...