Как проверить, вызывается ли функция при выполнении другой функции в django test?
У меня есть метод внутри менеджера, этот метод вызывает функцию, импортированную из другого модуля. Теперь я пытаюсь написать тест, который убедится, что функция вызывается, когда выполняется метод менеджера. Я попробовал несколько методов, но они не сработали, вот пример кода. Подсказка: я использую pytest в качестве тестраннера
from unittest import mock
# Customer Manager class
class ItemsManager(models.Manager):
def bulk_update(self, *args, **kwargs):
result = super().bulk_update(*args, **kwargs)
items_bulk_updated(*args, **kwargs)
return result
# signals.py file
def items_bulk_updated(*args, **kwargs):
print("items bulk updated")
# test file
# Base TestCase Inherits from APITestCase
class TestItems(BaseTestCase):
@mock.patch("items.signals.items_bulk_updated",autospec=True)
def test_bulk_update_items_triggers_signal(self, mock_function):
items_qs = Items.objects.all()
result = Items.objects.bulk_update(items_qs, ['item_name'])
mock_function.assert_called()
Предполагаю, что функция, которую вы хотите проверить, это items_bulk_updated
.
Поскольку вы тестируете ItemsManager.bulk_update()
и хотите проверить, что items_bulk_updated
вызывается внутри этого метода, путь в вашем @mock.patch
должен быть путем к файлу, в который импортируется функция, а не ее источником. Это означает, что вам нужно обновить
@mock.patch("items.signals.items_bulk_updated", autospec=True)
to
@mock.patch("<path-to-items-manager-file>.items_bulk_updated", autospec=True)
где <path-to-items-manager-file>
, как и предполагалось, является путем к вашему ItemsManager
классу.