0
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