2015-07-08 3 views
4

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

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

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

ответ

8

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

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

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

Смежные вопросы