Недавно я перешел с Python 2.7 на Python 3.8. При запуске тестов возникает новое странное явление, которое можно воспроизвести на этом простом примере:
from django.test import TestCase
from users.models import User
class TestWTF(TestCase):
def setUp(self):
self.user = User.objects.create(email='admin@project.com')
def test_failure(self):
self.assertTrue(False)
def test_success(self):
pass
Когда test_failure()
не удается, объект self.user
не удаляется из БД. Похоже, что обещанной функции отката просто не происходит. test_success()
и все последующие тесты в том же классе завершатся ошибкой с нарушением ограничения UNIQUE
, когда setUp()
попытается снова создать объект.
Этого не происходит в Python 2.
Частичный вывод из pytest
Я использую:
$ pytest -W ignore -s
================================================= test session starts ==================================================
platform linux -- Python 3.8.2, pytest-5.4.1, py-1.8.1, pluggy-0.13.1
django: settings: project_sites.settings.tests (from ini)
rootdir: /home/emes/devel/project/project, inifile: pytest.ini
plugins: django-3.8.0, env-0.6.2, case-1.5.3, cov-2.8.1
collected 2 items
[...]
=============================================== short test summary info ================================================
FAILED deals/tests/test_wtf.py::TestWTF::test_failure - AssertionError: False is not true
FAILED deals/tests/test_wtf.py::TestWTF::test_success - django.db.utils.IntegrityError: UNIQUE constraint failed: use...
================================================== 2 failed in 22.76s ==================================================
редактировать: Я использую Django -1.11.26