tests.pydjango: mock post_save обработчик сигнала?
from unittest.mock import patch
from orders.models import Order
class OrderModelTest(CartSetupTestCase):
def test_string_representation(self):
# Mocking Order's post_save signal
with patch('orders.signals.post_save_order', autospec=True) as mocked_handler:
post_save.connect(
mocked_handler,
sender=Order,
dispatch_uid='test_cache_mocked_handler'
)
order = Order.objects.create(
user=self.user,
merchant_uid="1475633246629",
customer_name="asd",
address="주소",
address_detail="asdfdsa",
postal_code="12345",
phone_number="01095104344",
possible_date_start="2011-11-24",
possible_date_end="2011-11-24",
possible_time_start="11:22 AM",
possible_time_end="11:22 AM",
total_price=self.cart.total_price,
)
signals.py
@receiver(post_save, sender=Order, dispatch_uid="spacegraphy")
def post_save_order(sender, instance, created, **kwargs):
if created:
SlackNotification.objects.create(
receiver="order_web",
content="asdfasdf"
)
Я последовал https://stackoverflow.com/a/13119150/3595632, но он не работает, а это значит, что называется обработчик сигнала в режиме реального времени! (Я проверил его с помощью print()
)
Что-то не так?
Почему бы просто не вызвать функцию с вашим тестом? Чтобы проверить, что сигнал срабатывает, когда что-то создается, это немного связано с тем, что он является основным django. Вы также можете вызвать метод signal.send с соответствующей сигнатурой. – theWanderer4865
@ theWanderer4865 Я не поймал, что ты сказал. Не могли бы вы привести мне пример, пожалуйста? – user3595632
Вы утверждали, что mock_handler был вызван? Когда ваш сигнальный код импортируется (при запуске Django), он регистрирует любое количество обработчиков сигнала - вы должны явно отключить другой обработчик, если вы не хотите его запускать. Есть еще что сказать, но это будет шаг 1. – theWanderer4865