Тестирование ручных транзакций внутри юнит-тестов Django

Как вы тестируете код, который отключает автокоммит и использует точки сохранения, внутри юнит-теста Django?

Класс unitjt по умолчанию Django охватывает все тесты внутри @atomic decorator, который обычно является именно тем, что вам нужно, чтобы гарантировать, что база данных sqlite будет сброшена между тестами. Тем не менее, любой код, который касается transaction.set_autocommit() из теста выдает ошибку:

TransactionManagementError: This is forbidden when an 'atomic' block is active.

даже если он отлично работает за пределами unittest.

Как временно отключить автоматическую фиксацию транзакции в модульном тесте, чтобы можно было проверить фиксацию вручную?

1 ответ

Использование TransactionTestCase:

TransactionTestCase а также TestCase идентичны, за исключением способа сброса базы данных в известное состояние и возможности тестового кода для проверки эффектов фиксации и отката: A TransactionTestCase сбрасывает базу данных после запуска теста, обрезая все таблицы. TransactionTestCase может вызывать коммит и откат и наблюдать влияние этих вызовов на базу данных.

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