ЕДИНЦИОННЫЕ Тестирование в DRF, ошибка Mock.Patch Transaction.atomic с unittest.mock.patchPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 ЕДИНЦИОННЫЕ Тестирование в DRF, ошибка Mock.Patch Transaction.atomic с unittest.mock.patch

Сообщение Anonymous »

@transaction.atomic
def deposit(user: User, account_number: str, amount: float) -> None:
account = get_object_or_404(
Account.objects.select_for_update(), account_number=account_number, user=user
)

account.balance += amount
account.save()

AccountTransaction.objects.create(~~~~~)

class TestDepositUnit(TestCase):

@patch("django.db.transaction.atomic", return_value = MagicMock())
@patch("account.services.AccountTransaction.objects.create")
@patch("account.services.get_object_or_404")
def test_deposit(self, mock_get_object_or_404, mock_create, mock_atomic):

mock_user = MagicMock()
mock_user.username = "testuser"

mock_account = MagicMock()
mock_account.balance = 0
mock_account.save = MagicMock()

mock_get_object_or_404.return_value = mock_account

deposit(user=mock_user, account_number="123", amount=100)

asset mock_account.balance == 100
< /code>
Я хочу исправить djagno orm, потому что я хочу провести модульное тестирование без базы данных.
кажется, что Transaction.atomic была исправлена, но я получаю ошибку выполнения базы данных. Или есть еще одна проблема? def get_autocommit(self):
"""Get the autocommit state."""
> self.ensure_connection()
E RuntimeError: Database access not allowed, use the "django_db" mark, or the "db" or "transactional_db" fixtures to enable it.

/lib/python3.13/site-packages/django/db/backends/base/base.py:454: RuntimeError
====== short test summary info =======
FAILED tests/account/test_deposit.py::TestDepositUnit::test_deposit_unit - RuntimeError: Database access not allowed, use the "django_db" mark, or the "db" or "transactional_db" fixtures to enable it.
1 failed in 0.08s


Подробнее здесь: https://stackoverflow.com/questions/797 ... -mock-patc
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»