@wawa

Как тестировать код со штатными ошибками уровня БД?

У меня при регистрации во view происходит следующее:
if form.is_valid():
        try:
            user = User.objects.create_user(
                email=form.cleaned_data['email'],
                password=form.cleaned_data['password1']
            )
        except IntegrityError:
            user = User.objects.get(email=form.cleaned_data['email'])
            ...

Всё работает как надо. Но не могу протестировать этот код в django.test.TestCase:
ERROR: test_registration_when_existing_inactive_email (accounts.test_views.SignupTest)
----------------------------------------------------------------------
Traceback (most recent call last):
...
return self.cursor.execute(sql, params)
psycopg2.IntegrityError: ОШИБКА: повторяющееся значение ключа нарушает ограничение уникальности "accounts_user_email_key"
DETAIL: Ключ "(email)=(test@example.com)" уже существует.

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
...
return self.cursor.execute(sql, params)
django.db.utils.IntegrityError: ОШИБКА: повторяющееся значение ключа нарушает ограничение уникальности "accounts_user_email_key"
DETAIL: Ключ "(email)=(test@example.com)" уже существует.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
...
django.db.transaction.TransactionManagementError: An error occurred in the current transaction. You can't execute queries until the end of the 'atomic' block.

----------------------------------------------------------------------
Ran 16 tests in 1.498s

FAILED (errors=1)
Destroying test database for alias 'default'...

Очевидно IntegrityError мешает проведению теста, но эта ошибка - штатное поведение. Как протестировать такой код?
  • Вопрос задан
  • 275 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы