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

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

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

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

1 ответ

Решение

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

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

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

Другие вопросы по тегам