Тестирование Django: --keepdb сбрасывает изменения, сделанные во время тестов?
Согласно документам Django относительно тестов, --keepdb
Флаг сохранит тестовую базу данных для будущих запусков.
https://docs.djangoproject.com/en/1.8/ref/django-admin/
Просто чтобы было ясно, будут ли какие-либо изменения, внесенные в базу данных тестами (то есть: object.save()
) будет сброшен автоматически? Или эти изменения нужно будет отменить в рамках тестов?
1 ответ
Если вы используете Django по умолчанию TestCase
все тесты выполняются в транзакции, которая откатывается по завершении тестов. Если ваша база данных поддерживает транзакции, вам не нужно ничего очищать.
Если вы используете Django LiveServerTestCase
или же TransactionTestCase
все таблицы усекаются после каждого теста, а исходные данные, которые сериализуются перед тестом, загружаются в базу данных теста. Это не сохранит данные для перенесенных приложений, только для неперенесенных приложений.
--keepdb
опция не будет делать ничего особенного с базой данных. Он просто предотвращает уничтожение тестовой базы данных, и, если база данных найдена в начале тестов, она используется вместо создания новой. Таким образом, любые данные, которые каким-либо образом останутся в базе данных после завершения испытаний, будут рассматриваться как исходные данные. Это в основном актуально, если какая-то ошибка или пользовательское прерывание мешают тестам без транзакций очистить базу данных. В этом случае может быть хорошей идеей воссоздать базу данных.