0
tests.pydjango:模擬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