Тестирование Django: сбрасывает ли --keepdb изменения, сделанные во время тестов?

Согласно документам Django, касающимся тестов, флаг --keepdb сохранит тестовую базу данных для будущих запусков.

https://docs.djangoproject.com/en/1.8/ref/django-admin/#django-admin-option---keepdb

Просто для ясности, будут ли автоматически сброшены любые изменения, внесенные в базу данных тестами (например: object.save() )? Или эти изменения нужно будет отменить в ходе тестов?


person Adam Starrh    schedule 08.07.2015    source источник


Ответы (1)


Если вы используете Django по умолчанию TestCase, все тесты выполняются в транзакции, которая откатывается после завершения тестов. Если ваша база данных поддерживает транзакции, вам не придется ничего очищать.

Если вы используете Django LiveServerTestCase или TransactionTestCase, все таблицы усекаются после каждого теста, а исходные данные, которые сериализуются перед тестом, перезагружаются в тестовую базу данных. Это не сохранит никаких данных для перенесенных приложений, только для неперенесенных приложений.

Параметр --keepdb не будет делать ничего особенного с базой данных. Это просто предотвращает уничтожение тестовой базы данных, и если база данных найдена в начале тестов, она используется вместо создания новой. Таким образом, любые данные, которые каким-либо образом остались в базе данных после завершения тестов, будут рассматриваться как исходные данные. В основном это актуально, если какая-то ошибка или пользовательское прерывание не позволяют тестам без транзакций очистить базу данных. В этом случае может быть хорошей идеей воссоздать базу данных.

person knbk    schedule 08.07.2015