Как протестировать commit_manually внутри юнит-тестов Django

Как вы тестируете код Django, который использует commit_manually( ) из юниттеста?

У меня есть долгосрочный метод, который удаляет большое количество записей, достаточное для того, чтобы он не мог сохранить все эти изменения в одной транзакции, не потребляя при этом всю системную память. Поэтому я оборачиваю его в @commit_manually и периодически вызываю commit().

Однако в Django 1.6 все юнит-тесты теперь завернуты в transaction.atomic(), поэтому, если я попытаюсь сделать какие-либо ручные коммиты, я получу ошибку:

django.db.transaction.TransactionManagementError: Это запрещено, когда активен «атомарный» блок.

Каков обходной путь для этого?


person Cerin    schedule 29.04.2014    source источник


Ответы (1)


Использование TransactionTestCase вместо TestCase должно дать вам эту возможность.

https://docs.djangoproject.com/en/1.6/topics/testing/tools/#django.test.TransactionTestCase

https://docs.djangoproject.com/en/1.6/topics/testing/advanced/#advanced-features-of-transactiontestcase

person Loic Duros    schedule 29.04.2014
comment
@Cerin исправил вашу проблему с помощью TransactionTestCase? - person Loic Duros; 01.05.2014
comment
К сожалению нет. Все, что мне дает, это TransactionManagementError: ваша серверная часть базы данных не работает должным образом, когда автофиксация отключена. Включите его перед использованием «атомного». Я использую Sqlite3 в качестве бэкэнда unittest db. - person Cerin; 02.09.2014